[英]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.