簡體   English   中英

如何在另一個頭文件中包含c頭文件?

[英]How to include c header file in another header?

我正在使用curses庫編寫一個ac程序,並希望創建一些反映我的應用程序UI的結構。

這是我的app.c文件

#include <stdlib.h>
#include <stdio.h>
#include "screen.h"

int main() {
    struct screen scr = {
        .win1 = {
            .title = "win1"
        },
        .win2 = {
            .title = "win2"
        }
    };
}

這是screen.h

#ifndef SCREEN_H
#define SCREEN_H

#include "window.h"

struct screen {
    struct window win1;
    struct window win2;

    struct window *focused;
};

#endif

這是window.h

#ifndef WINDOW_H
#define WINDOW_H

#include "screen.h"

struct window {
    char *title;
    void (*handle_key_event)(struct screen*);
};

#endif

我的窗口結構句柄方法必須接收對屏幕的引用,以便在某些特定情況下能夠更改焦點窗口。 但是當我編譯它時,我得到了警告

window.h:8:34: warning: its scope is only this definition or declaration, which is probably not what you want

這是因為它看不到屏幕聲明。 如何解決這個問題?

警告是在對結構的第一個引用位於其他內部時。

放置struct screen; struct window的聲明上方。

頭文件的循環依賴關系不是一個好主意。 考慮重構。 您不需要結構的定義即可聲明指向它的指針。 向前聲明就足夠了。

這是關於基礎設計的,僅此而已。 要讓兩個相互包含的頭文件根本沒有任何意義,請不要這樣做。 #include被視為單向依賴項。 在程序設計中,較復雜的對象取決於/由較不復雜的對象組成。

例如,一個屏幕包含一個窗口,因此它應該是#include "window.h"的窗口。 雖然窗口對屏幕一無所知,但它只應與顯示窗口有關。 兩個模塊之間的交叉通信可能必須在第三個模塊中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM