jer*_*rin 42 c++ gcc clang gcc-pedantic
以下代码片段在添加-pedantic和-Werror有点旧的编译器上生成编译错误。
#include <cstdint>
#include <iostream>
int add(int a, int b){
return a + b;
}; // <-- stray semicolon
int main (){
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然而,较新的编译器版本不会发生这种情况。请在https://godbolt.org/z/KWeb8WTxz上找到 GCC( 10.x和11.x )和 Clang(5.x、6.x)的矩阵来演示差异。
我的问题有两个部分:
Bri*_*ian 60
从 C++11 开始,全局级别的额外分号;(也称为空声明s )是有效的。我相信这对于编写宏有时很有用。
因此,GCC 11 删除了在使用时或稍后使用时-pedantic的额外诊断。看:;-std=c++11
您可以使用早于 C++11 的 C++ 标准来恢复旧行为。如果您通过了,GCC 11 和 clang 6 都会发出旧的诊断信息-std=c++03。
另外,GCC 和 Clang 的最新版本都支持警告选项,-Wextra-semi该选项专门警告多余的分号。感谢 HolyBlackCat 提到这一点。