gcc 是否有可能使用GNU扩展,除非是学究式的?

xam8gpfp  于 2023-10-19  发布在  其他
关注(0)|答案(2)|浏览(115)

有没有一种方法可以有条件地启用依赖于GCC扩展(如__int128)的功能,如果它们可以编译的话?
我想做一些像

void foo(int);
void foo(long);
void foo(long long);
#if not_pedantic
void foo(__int128);
#endif

我找不到在传递-pedanticpedantic-error时定义的宏。

jmp7cifd

jmp7cifd1#

这不是个好主意仅检查编译器,并使用#pragma s或__extension__禁用-pedantic-errors警告:

void foo(int);
void foo(long);
void foo(long long);
#ifdef __GNUC__
__extension__ void foo(__int128);
#endif

如果您的用户使用-pedantic-errors构建,但仍然根据需要使用扩展,如果您像这样禁用重载,他们会非常恼火。

py49o6xq

py49o6xq2#

gcc提供了__STRICT_ANSI__,如果你已经设置了-ansi-std=c++XX(与启用扩展的-std=gnu++XX相反)。这不会检查-pedantic,只检查上面提到的标志:

void foo(int);
void foo(long);
void foo(long long);
#ifndef __STRICT_ANSI__
void foo(__int128);
#endif

我没有看到任何方法来检查-pedantic具体。似乎没有任何宏或杂注允许检查(而不是设置)特定的编译器标志。

相关问题