同一段C++代码在GCC、MSVC等不同编译器下运行结果完全不同,反复核对语法也找不到问题,不知道该以哪份标准为准。这类差异大多来自未定义行为,不是编译器本身的标准冲突。

1. 避开未定义行为
C++标准里明确标注的未定义行为,不同编译器会自行实现不同逻辑。
比如序列点之间多次修改同一变量、野指针访问这类写法,必然会在不同平台表现出完全不同的结果,直接删掉这类写法即可。
2. 开启最高等级警告
在所有编译器里开启-Wall、-Wextra这类最高等级警告选项。
编译器会主动标出所有存在歧义的代码段,提前把可能引发跨平台差异的写法全部修正。
3. 用标准库替代编译器扩展
不要使用GCC的__attribute__、MSVC的__declspec这类专属编译器扩展语法。
全部改用C++标准库提供的等效功能,代码就能在所有符合标准的编译器上得到一致表现。
4. 用多CI环境自动校验
搭建同时包含GCC、Clang、MSVC的持续集成环境。
每次提交代码后自动在三个编译器下编译测试,提前发现跨编译器的行为差异,不用等到部署时才发现问题。
本文凡亿教育原创文章,转载请注明来源!

扫码关注


















![电子设计:傅里叶是搞音乐的? [学以致用系列课程之数字信号处理]](https://api.fanyedu.com/uploads/image/81/419579422381a6adaa97cb0bf0e8ee.png)






















