我遇到了一個奇怪的情況。我的理解是,如果我已將#ifndef #define #endif標誌放入所有.h文件,那麼包含頭文件的順序並不重要。預期' - '標記之前的非限定標識
舊代碼 A.H
#ifndef A_H
#define A_H
blah blah blah
#endif
a.cc
#include "a.h"
blah blah blah
而且上面的代碼工作得很好。
現在我添加了一個新的頭b.h
b.h
#ifndef B_H
#define B_H
blah blah blah
#endif
新a.cc
#include "a.h"
#include "b.h"
blah blah blah
以上a.cc編譯OK。但是,如果我改變a.cc到
新a.cc版本2
#include "b.h"
#include "a.h"
blah blah blah
編譯失敗,錯誤:之前的預期不合格的ID「 - 」標記。
對不起,我不能在一個小例子中重現相同的錯誤。編譯錯誤導致了一個大項目。如果我在上面創建的一個小例子中進行測試。它編譯,但如果我切換回該項目。 #include指令順序很重要。我不知道這個問題可能發生在哪裏。任何人都可以給我一個線索將是很有幫助的。 在此先感謝
[已解決] 我已經自己解決了這個問題。然而我認爲也可能有其他人也會堅持下去。造成這個問題的原因是類似以下
在test.cc
const int var_undef = -1;
#define var_undef (-1)
它編譯,而如果換成這兩條線路
#define var_undef (-1)
const int var_undef = -1
它編譯預計unqualified-錯誤正如我所述,在' - '標記之前的標識。
'#include'本質上只是一個複製粘貼過程,所以包含順序可能很重要。請工作來製作一個最小的測試用例,否則我們不能提供更多的幫助。 – 2012-03-19 11:49:10
頭文件包含順序無關緊要,除非你在相互混合的東西 – 2012-03-19 11:50:18
如果頭文件包含'#define'宏,或者在'b.h'的末尾有一些錯誤,那麼順序*就會*重要。或許缺少';'或'}'? – 2012-03-19 11:51:14