2016-01-10 108 views
2

我目前正在編譯GDCM項目,使用MacOSX默認編譯器:clang。這個編譯器觸發它自己的頭警告(見ref):警告:禁用擴展遞歸宏

In file included from /Users/builder/external/GDCM/Source/MediaStorageAndFileFormat/gdcmJPEG12Codec.cxx:21: 
/Users/builder/external/GDCM/Source/MediaStorageAndFileFormat/gdcmJPEGBITSCodec.cxx:336:9: warning: disabled expansion of recursive macro [-Wdisabled-macro-expansion] 
    if (setjmp(jerr.setjmp_buffer)) 
     ^
/Users/builder/llvm/llvm-rel-install/bin/../include/c++/v1/setjmp.h:40:21: note: expanded from macro 'setjmp' 
#define setjmp(env) setjmp(env) 
        ^
In file included from /Users/builder/external/GDCM/Source/MediaStorageAndFileFormat/gdcmJPEG12Codec.cxx:21: 
/Users/builder/external/GDCM/Source/MediaStorageAndFileFormat/gdcmJPEGBITSCodec.cxx:724:9: warning: disabled expansion of recursive macro [-Wdisabled-macro-expansion] 
    if (setjmp(jerr.setjmp_buffer)) 
     ^
/Users/builder/llvm/llvm-rel-install/bin/../include/c++/v1/setjmp.h:40:21: note: expanded from macro 'setjmp' 
#define setjmp(env) setjmp(env) 
        ^
2 warnings generated. 

此操作可以在LLVM頭出現明顯錯誤,(我覺得很難相信),或我錯過了一些有關使用setjmpC++98

回答

6

既不是。這不是LLVM頭部中的錯誤,也不是說你錯過了關於使用setjmp的一些信息,而是因爲你已經啓用了一個警告,該警告恰巧也觸發了完全有效的代碼。大多數警告都會。這就是爲什麼他們是警告而不是錯誤。這個特定的警告通常發生在有效代碼上。這就是爲什麼它默認不啓用,甚至不包括在-Wall中,甚至沒有包含在-Wextra中。無論如何你還是啓用了它。這很好,但你應該準備好處理結果。