我目前正在使用GDCM默认编译器MacOSX构建clang项目。该编译器在其自己的 header 中触发警告(请参阅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 header 中的明显错误(我很难相信),或者我缺少有关setjmp中使用C++98的某些信息。

最佳答案

两者都不是。这不是LLVM header 中的错误,不是您缺少有关setjmp的使用的信息,而是您启用了一个警告,该警告也恰好在完全有效的代码上触发。大多数警告都可以。这就是为什么他们是警告而不是错误。此特定警告恰好在有效代码上触发。这就是为什么默认情况下不启用它,甚至不将其包含在-Wall中,甚至不将其包含在-Wextra中。但是您还是启用了它。很好,但是您应该准备好处理结果。

10-08 11:13
查看更多