看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Keil C 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 因為專案管理的關係, 會在一個head file中去include 所有的有用到的head file, Ex: All.h #include A.h #inculde B.h ... 現在如果A.h與B.h會去reference對方的define Ex: A.h #define AA ... #if BB ... #endif B.h #define BB ... #if AA ... #endif 在這種前題下, compile會出現warning C322: unknown identifier 想問一下, 一般遇到這樣的問題都怎麼解決, 如果這樣的安排在C中是不允許的, 大家又是習慣怎麼去規劃define的呢? 謝謝. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.210.106.78 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1423636658.A.B26.html
wenyonba: A.h B.h 也要互相 include 才行吧 02/11 14:43
wenyonba: 不然先處理 A 的時候找不到 B,反之亦然,不是嗎? 02/11 14:46
littleshan: 合併成一個.h 02/11 14:55
littleshan: 這種cyclic dependency表示你的模組切割是有問題的 02/11 14:55
longlongint: class A; class B; 02/11 15:40
TobyH4cker: #ifndef AA 02/11 18:06
TobyH4cker: #include "A.h" 02/11 18:06
TobyH4cker: #endif 02/11 18:06
TobyH4cker: 你用 #if 是判斷後面的條件為True或False,而你又指定 02/11 18:07
TobyH4cker: 一個沒有被定義內容的identifier,所以出現錯誤 02/11 18:08
TobyH4cker: 我漏了一個 #define AA 在 #ifndef 成立區塊 02/11 18:10
TobyH4cker: 不對,我給一下完整的 02/11 18:12
TobyH4cker: /* A.h */ 02/11 18:15
TobyH4cker: #ifndef _A_H 02/11 18:15
TobyH4cker: #define _A_H 02/11 18:15
TobyH4cker:   02/11 18:16
TobyH4cker: #include "B.h" 02/11 18:16
TobyH4cker:   02/11 18:16
TobyH4cker: // HEADER DEFINITION 02/11 18:16
TobyH4cker:   02/11 18:16
TobyH4cker: #endif 02/11 18:17
TobyH4cker:   02/11 18:17
TobyH4cker: /* B.h */ 同理 02/11 18:18
TobyH4cker: /* all.h */ #include "A.h" #include "B.h" 02/11 18:18
Killercat: ......回個文吧 02/11 21:55
damody: 為什麼要推那麼長 02/11 22:54
PkmX: 看到推文都覺得好累 中間還要等五秒... 02/12 07:42
Push5F: 先搞懂 .c .h差異 0.0 02/12 23:05
MaxHaru: 感謝各位的回應.. 02/13 13:18