首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在编译时区分-std=c++17和-std=gnu++17?检查宏?

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

Stack Overflow用户
提问于 2022-10-29 05:03:02
回答 1查看 87关注 0票数 3

我正在使用__int128扩展的g++。-std=c++17的问题是,一些C++库不具备对该扩展的全部支持(即std::make_unsigned<>失败)。当使用-std=gnu++17时,它工作得很好。

我添加了一个头文件,允许<limit>在使用-std=c++17时与__int128一起工作,我希望暂时保留它,但是在使用-std=gnu++17时它会中断(因为它已经定义好了)。所以我想增加一个这样的条件:

代码语言:javascript
复制
#if !(<something>)
...
#endif

如果编译器已经支持__int128的限制。

我的问题是:我可以检查的<something>是什么来区分标准和GNU c++17库?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-29 05:25:12

我做了这个:

代码语言:javascript
复制
$ 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)

产出如下:

代码语言:javascript
复制
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更直接。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74242934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档