我预计这是一个过于具体的问题。这可能是因为我缺乏一些基础知识,而通过谷歌搜索无法找到答案。如果回答更一般版本的问题更有意义,请随意回答。
给定一些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=c++11"编译时,将打印出"200809"。
使用任何明确的标准版本编译C代码时,_POSIX_C_SOURCE宏根本没有被定义。
为什么会这样呢?最不合理的是,使用C++98编译的结果使得_POSIX_C_SOURCE成为了200809(也就是说晚了10年)。
_GNU_SOURCE
、_BSD_SOURCE
、_POSIX_C_SOURCE
等宏是由正在编译的程序设置而不是编译器环境设置的。从C++包含文件中设置它们有点像一个错误,尽管标准库的作者可能发现这对于某些inline
函数的工作是必要的。 - Simon Richter_POSIX_C_SOURCE
以获取getchar_unlocked()
。那么可接受的方法是先包含 C++ 标头,然后重新定义 _POSIX_C_SOURCE,再包含 C 标头吗? - Jo Sogetchar_unlocked()
,你需要使用足够新的glibc并且包含#include <stdio.h>
。 - Bill Lynch