[問題] 關於head file reference的問題

看板C_and_CPP (C/C++)作者 (懂得放手..才是王道)時間11年前 (2015/02/11 14:37), 編輯推噓4(4025)
留言29則, 9人參與, 最新討論串1/1
開發平台(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

02/11 14:43, , 1F
A.h B.h 也要互相 include 才行吧
02/11 14:43, 1F

02/11 14:46, , 2F
不然先處理 A 的時候找不到 B,反之亦然,不是嗎?
02/11 14:46, 2F

02/11 14:55, , 3F
合併成一個.h
02/11 14:55, 3F

02/11 14:55, , 4F
這種cyclic dependency表示你的模組切割是有問題的
02/11 14:55, 4F

02/11 15:40, , 5F
class A; class B;
02/11 15:40, 5F

02/11 18:06, , 6F
#ifndef AA
02/11 18:06, 6F

02/11 18:06, , 7F
#include "A.h"
02/11 18:06, 7F

02/11 18:06, , 8F
#endif
02/11 18:06, 8F

02/11 18:07, , 9F
你用 #if 是判斷後面的條件為True或False,而你又指定
02/11 18:07, 9F

02/11 18:08, , 10F
一個沒有被定義內容的identifier,所以出現錯誤
02/11 18:08, 10F

02/11 18:10, , 11F
我漏了一個 #define AA 在 #ifndef 成立區塊
02/11 18:10, 11F

02/11 18:12, , 12F
不對,我給一下完整的
02/11 18:12, 12F

02/11 18:15, , 13F
/* A.h */
02/11 18:15, 13F

02/11 18:15, , 14F
#ifndef _A_H
02/11 18:15, 14F

02/11 18:15, , 15F
#define _A_H
02/11 18:15, 15F

02/11 18:16, , 16F
 
02/11 18:16, 16F

02/11 18:16, , 17F
#include "B.h"
02/11 18:16, 17F

02/11 18:16, , 18F
 
02/11 18:16, 18F

02/11 18:16, , 19F
// HEADER DEFINITION
02/11 18:16, 19F

02/11 18:16, , 20F
 
02/11 18:16, 20F

02/11 18:17, , 21F
#endif
02/11 18:17, 21F

02/11 18:17, , 22F
 
02/11 18:17, 22F

02/11 18:18, , 23F
/* B.h */ 同理
02/11 18:18, 23F

02/11 18:18, , 24F
/* all.h */ #include "A.h" #include "B.h"
02/11 18:18, 24F

02/11 21:55, , 25F
......回個文吧
02/11 21:55, 25F

02/11 22:54, , 26F
為什麼要推那麼長
02/11 22:54, 26F

02/12 07:42, , 27F
看到推文都覺得好累 中間還要等五秒...
02/12 07:42, 27F

02/12 23:05, , 28F
先搞懂 .c .h差異 0.0
02/12 23:05, 28F

02/13 13:18, , 29F
感謝各位的回應..
02/13 13:18, 29F
文章代碼(AID): #1KslYoic (C_and_CPP)
文章代碼(AID): #1KslYoic (C_and_CPP)