2012-07-10 64 views
0

我有一個標頭,下面的代碼有頭文件/usr/include/sys/param.h中不包括的CROUND的定義產生的神祕錯誤無論是在代碼本身或通過命令行參數:Xcode和Clang神祕地包含標題我沒有指定

#ifndef _PARSERTYPES_H_ 
#define _PARSERTYPES_H_  

#ifdef CROUND 
#warning #undef CROUND applied, defined in /usr/include/sys/param.h 
#undef CROUND 
#endif // CROUND 
enum TokType 
{ 
    FLOATING, INTEGER, STRING, SYMBOL, 
    OCURLY, CCURLY, OROUND, CROUND, OSQUARE, CSQUARE, 
};  

#endif // _PARSERTYPES_H_ 

與簡化鐺(C++)或GCC(克++)編譯器命令編譯:

cd /path/to/build3/modules/device/examples/sweep && /usr/bin/g++ -DQT_OPENGL_LIB -DQT_DESIGNER_LIB -DQT_GUI_LIB -DQT_SQL_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -D__DC1394__ - -DQT_NO_DEBUG -O3 -DNDEBUG -I/path/to/modules//. -I/opt/local/include -I/opt/local/include/opencv -I/usr/local/include -I/opt/local/include/QtOpenGL -I/opt/local/include/QtDesigner -I/opt/local/include/QtGui -I/opt/local/include/QtSql -I/opt/local/include/QtNetwork -I/opt/local/include/QtCore -I/Library/Frameworks/FreeType.framework/Headers -F/Library/Frameworks -I/opt/local/include/glib-2.0 -I/opt/local/lib/glib-2.0/include -I/opt/local/include/gdk-pixbuf-2.0 -I/opt/local/include/gtk-2.0 -I/opt/local/lib/gtk-2.0/include -I/Library/Frameworks/cairo.framework/Headers -I/opt/local/include/pango-1.0 -I/opt/local/include/atk-1.0 -o CMakeFiles/Example.dir/Example.cpp.o -c /path/to/modules/Example.cpp 

即產生以下(鐺)錯誤:

In file included from /path/to/parser/parser.h:69: 
path/to/parser/parserTypes.h:58:26: error: expected '}' 
     OCURLY, CCURLY, OROUND, CROUND, OSQUARE, CSQUARE, 
           ^
/usr/include/sys/param.h:171:16: note: expanded from macro 'CROUND' 
#define CROUND (CBLOCK - 1) /* Clist rounding. */ 
       ^
/path/to/parser/parserTypes.h:56:1: note: to match this '{' 
{ 

我能夠解決#undef CROUND的問題,但顯然這是一個非常臨時的解決方案。

什麼可能是這個問題的來源和適當的解決方案?

回答

2

您可能包含SOME系統頭文件,對吧?這些通常包括其他頭一大堆......

編輯:作爲一個解決方案...

一)使用的不上比較新的編譯器相抵觸

B)等名稱,使用枚舉類(除非你與一個宏衝突...這似乎是這裏的情況)

編輯2:一般來說,我不會建議嘗試「解決」其他標頭的廉價技巧,如#定義包含後衛宏或類似的東西。系統標題最好放在一邊。

+0

這就是爲什麼我問這個問題,我希望系統頭默認包含在OS X或其他東西中。該代碼中沒有包含,因爲它完全由值定義組成。 – 2012-07-11 18:02:48