#ifndef只能保證重複包含時,只包含一次。但snake.cpp和main.cpp是分別進行編譯的,snake.cpp裡的#define對於main.cpp不起作用。也就是說在編譯main.cpp時,snake.h是第一次包含,因此又有乙個ch,相互鏈結時就會發現重定義。正確的作法應該這樣:
1)在snake.h裡改為:
externchar ch; //只宣告不定義
externvoid f();
2)在snake.cpp裡加上:
char ch; // 在原始檔裡,這才是定義,僅此一次
避免標頭檔案重複引入和重複定義
使用預編譯指令,常用的預編譯指令如下 條件編譯 define 巨集定義 undef 取消巨集 include 文字包含 ifdef 如果巨集被定義就進行編譯 if defined 與ifdefine的區別在於可以可以組成複雜的判別條件 ifndef 如果巨集未被定義就進行編譯 if defined ...
標頭檔案中防止重複定義的巨集
我是個有 潔癖 的人,不願意與警告為伍,哪怕是只有乙個,也會讓我渾身上下都不舒服。在一次整改乙個嵌入式arm工程源 的過程中,乙個編譯告警迷惑了我,費了我不少時間。waring c2207w inventing extern inituartpos main.c line 87 按理說不應該出現這種...
標頭檔案重複包含
如果某個標頭檔案被多次包含,則在vc編譯器中編譯,會丟擲 重複定義 錯誤。為了避免同乙個檔案被重複包含多次,c 提出了2種解決方案。1 ifndef some file h define some file h endif 在檔案末端 2 pragma one ifndef define endif...