gpt4 book ai didi

c++ - 如何在编译时区分 -std=c++17 和 -std=gnu++17 ?检查宏?

转载 作者:行者123 更新时间:2023-12-05 01:03:24 25 4
gpt4 key购买 nike

我正在使用 __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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com