我正在使用 __int128
g++的扩展。 -std=c++17
的问题是某些 C++ 库没有对该扩展的所有支持(即 std::make_unsigned<>
失败)。使用 -std=gnu++17
时它工作正常。
我添加了一个允许 <limit>
的头文件与 __int128
合作使用 -std=c++17
时我想暂时保留它,但是在使用 -std=gnu++17
时它中断(因为它已经定义)。所以我想添加这样的条件:
#if !(<something>)
...
#endif
如果编译器已经支持 __int128
的限制.
我的问题是:那是什么 <something>
我可以检查以区分标准库和 GNU c++17 库吗?
最佳答案
我这样做了:
$ diff <(g++-11 -std=c++17 -E -dM -x c++ /dev/null|LC_ALL=C sort) \
<(g++-11 -std=gnu++17 -E -dM -x c++ /dev/null|LC_ALL=C sort)
输出是:
180a181,182
> #define __GLIBCXX_BITSIZE_INT_N_0 128
> #define __GLIBCXX_TYPE_INT_N_0 __int128
315d316
< #define __STRICT_ANSI__ 1
424a426,427
> #define linux 1
> #define unix 1
当然,这不是决定性的,但这可能是一个开始。
因此您可以检查 __STRICT_ANSI__
(表明没有 Gnu 扩展),但也许无法记录的 __GLIBCXX_BITSIZE_INT_N_0
更直接。
关于c++ - 如何在编译时区分 -std=c++17 和 -std=gnu++17 ?检查宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74242934/