C/C++共享头文件数字分隔符引发预编译问题及解决办法
解决C/C++共享头文件中数字分隔符引发的预处理器报错问题
我有一个C/C共享头文件,通过#ifdef __cplusplus隔离C专属代码,但其中带单引号数字分隔符的整型字面量:
int a = 0B0000'0001;
在Visual Studio中可正常编译,但在Linux环境下的GCC编译器和unifdef工具处理C代码时会触发预处理器报错。虽然C代码不需要使用数字分隔符,但预处理器仍会解析该语法,导致编译失败。移除单引号可以解决问题,但这里提供两种无需移除的可行方案:
方案1:适配GCC 12及以上版本
使用编译选项-std=c2x,C23标准(通过c2x编译选项启用)已支持数字分隔符语法,预处理器能正确识别单引号,不会抛出错误。方案2:适配低版本GCC
在数字分隔符后添加同行情注释规避语法检测,修改后的代码如下:int a = 0B0000'// workaround: final quote for pre-c2x: ' 0001;注释会被预处理器忽略,同时让低版本GCC不再将单引号判定为语法错误。
内容的提问来源于stack exchange,提问作者David Levy
相关产品推荐
相关产品推荐

