为何.h文件无法识别当前使用的__cplusplus版本?(Keil uVision5)
Keil uVision5中头文件__cplusplus宏识别问题解决方法
问题描述
头文件中用于检测C++版本的代码块显示为灰色,宏IS_CPP14_SUPPORTED在头文件里不被识别,但在.cpp文件中使用该宏时能正常生效:
#define CPP14_SUPPORTED (__cplusplus >= 201402L) #if CPP14_SUPPORTED #define IS_CPP14_SUPPORTED 1 // 头文件中此段显示灰色 #endif
原因分析
Keil uVision5默认将.h文件按C语言语法规则解析,而__cplusplus是C++特有的预定义宏,C语法解析模式下不会自动定义该宏,导致条件编译块被判定为无效,从而显示灰色。
解决方法
1. 修改单个头文件的解析模式
- 右键目标头文件,选择Options for File 'xxx.h'
- 在弹出窗口中,将File Type从默认的
C source file改为C++ source file,点击确定 - 重新打开头文件,灰色代码块会恢复正常高亮
2. 全局配置所有头文件的解析模式(批量处理用)
- 点击菜单栏Edit → Configuration
- 切换到Editor选项卡,在File Extensions区域找到
.h扩展名 - 将对应的File Type修改为
C++ source file,点击OK保存
3. 验证编译器C++版本支持
- 点击Project → Options for Target,切换到**C/C++**选项卡
- 确认Language选项设置为
C++14或更高版本,确保__cplusplus宏能被正确定义为对应版本值
注意事项
- 如果头文件需要兼容C和C++,可在外层添加判断避免C编译出错:
#ifdef __cplusplus #define CPP14_SUPPORTED (__cplusplus >= 201402L) #if CPP14_SUPPORTED #define IS_CPP14_SUPPORTED 1 #endif #endif
内容的提问来源于stack exchange,提问作者schanti schul
相关产品推荐
相关产品推荐

