Kis*_*Yoo 1 c c++ preprocessor
当我使用“POSIX 间隔计时器”或进行信号处理时,我必须插入
#define _POSIX_C_SOURCE 200809L
Run Code Online (Sandbox Code Playgroud)
在我的任何文件中的第 1 行。但我发现只有 C 代码需要它,而不是 C++ 代码。
在这个问题上g++,gcc编译器与编译器的工作方式有何不同?
下面是我的系统环境(gcc:相同版本)
user@~ $ g++ --version
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Run Code Online (Sandbox Code Playgroud)
我构建了在 CMakeLists.txt 中添加这一行的项目
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++14 -Wall")
Run Code Online (Sandbox Code Playgroud)
g++ 定义了_GNU_SOURCE,它定义了_POSIX_C_SOURCE。
这样做是因为标准 c++ 模板库需要它。
更全面的讨论在https://gcc.gnu.org/bugzilla/show_bug.cgi?id=2082
https://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html中的宏说明