Eclipse CDT无法正确解析<variant>头文件,__cplusplus宏定义异常求助
解决Eclipse中__cplusplus宏未正确识别的问题
我之前在使用gcc 7.x版本时也碰到过一模一样的问题——明明已经指定了-std=c++17编译参数,但Eclipse里的__cplusplus宏就是没被正确定义,导致依赖这个宏的代码被当成非活动预处理指令灰掉了。这其实是gcc 7.x的一个兼容性设计,下面是具体的解决步骤:
1. 修正编译器编译参数
gcc 7.x默认情况下,即使你指定了-std=c++17,__cplusplus还是会被定义为旧的199711L(对应C98),目的是兼容一些依赖旧宏值的遗留代码。要让它正确对应C17的版本,需要手动添加宏定义:
- 打开Eclipse项目的C/C++ Build -> Settings -> GCC C++ Compiler -> Miscellaneous
- 在Other flags里,确保已有
-std=c++17,再追加-D__cplusplus=201703L
2. 同步Eclipse代码分析器的设置
Eclipse的CDT代码分析器是独立于实际编译器的,所以还要单独配置让它识别这个宏:
- 进入Project Properties -> C/C++ General -> Paths and Symbols -> Symbols -> GNU C++
- 点击Add按钮,输入名称
__cplusplus,值设为201703L,勾选Add to all configurations后保存。
完成这两步后,Eclipse就会正确识别__cplusplus的定义,那些被灰色折叠的预处理代码也会正常激活显示了。
顺便提一句:从gcc 10版本开始,官方调整了这个行为,使用-std=c++17会自动将__cplusplus设置为201703L,不需要再手动指定,但gcc 7.x还需要这个额外操作。
内容的提问来源于stack exchange,提问作者Peter VARGA
相关产品推荐
相关产品推荐

