有没有一种方法可以有条件地启用依赖于GCC扩展(如__int128)的功能,如果它们可以编译的话?我想做一些像
__int128
void foo(int); void foo(long); void foo(long long); #if not_pedantic void foo(__int128); #endif
我找不到在传递-pedantic或pedantic-error时定义的宏。
-pedantic
pedantic-error
jmp7cifd1#
这不是个好主意仅检查编译器,并使用#pragma s或__extension__禁用-pedantic-errors警告:
#pragma
__extension__
-pedantic-errors
void foo(int); void foo(long); void foo(long long); #ifdef __GNUC__ __extension__ void foo(__int128); #endif
如果您的用户使用-pedantic-errors构建,但仍然根据需要使用扩展,如果您像这样禁用重载,他们会非常恼火。
py49o6xq2#
gcc提供了__STRICT_ANSI__,如果你已经设置了-ansi或-std=c++XX(与启用扩展的-std=gnu++XX相反)。这不会检查-pedantic,只检查上面提到的标志:
__STRICT_ANSI__
-ansi
-std=c++XX
-std=gnu++XX
void foo(int); void foo(long); void foo(long long); #ifndef __STRICT_ANSI__ void foo(__int128); #endif
我没有看到任何方法来检查-pedantic具体。似乎没有任何宏或杂注允许检查(而不是设置)特定的编译器标志。
2条答案
按热度按时间jmp7cifd1#
这不是个好主意仅检查编译器,并使用
#pragma
s或__extension__
禁用-pedantic-errors
警告:如果您的用户使用
-pedantic-errors
构建,但仍然根据需要使用扩展,如果您像这样禁用重载,他们会非常恼火。py49o6xq2#
gcc提供了
__STRICT_ANSI__
,如果你已经设置了-ansi
或-std=c++XX
(与启用扩展的-std=gnu++XX
相反)。这不会检查-pedantic
,只检查上面提到的标志:我没有看到任何方法来检查
-pedantic
具体。似乎没有任何宏或杂注允许检查(而不是设置)特定的编译器标志。