gpt4 book ai didi

C++ 代码和 C 版本宏

转载 作者:可可西里 更新时间:2023-11-01 15:40:05 26 4
gpt4 key购买 nike

预计这是一个过于具体的问题。那可能是因为我缺乏一些我无法通过谷歌搜索找到的基本知识。如果更有意义,请随意回答问题的更一般版本。

给定一些 C++ 代码,我想知道它的特定标准版本和它的 C 标准版本(如果有的话)是否(以及如何)相关。

我已经验证了这个测试代码

#include <cstdio>
int main(void)
{
printf("%ld\n", _POSIX_C_SOURCE);
return 0;
}

使用“g++ -std=c++98”、“g++ -std=c++11”、“clang++ -std=c++98”、“clang++ -std=”中的任何一个编译时打印“200809” C++11”。

(当我使用任何明确的标准版本编译 C 时,根本没有定义 _POSIX_C_SOURCE 宏)。

这是为什么呢?完全没有意义的是,在 _POSIX_C_SOURCE 中编译 C++98 效果为 200809(即 10 年后)。

最佳答案

您可能正在寻找两件事:

  • 如果你想检测C++98:宏__cplusplus定义为 199711L .
  • 如果你想检测C++11:宏__cplusplus定义为 201103L .

如果您想检测编译器版本,该站点提供了大量有关适用的各种宏的信息:http://sourceforge.net/p/predef/wiki/Compilers/

至于_POSIX_C_SOURCE ,这是 C 标准库 中可用功能的一个属性。因此,因为您使用的是新的 glibc(至少 2.10),所以您能够支持这些功能。

至于 C 编译器不报告这些值,您可能需要显式包含 <features.h>访问它们。

关于C++ 代码和 C 版本宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22198657/

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