当我问这个问题时,我几乎总是肯定是的,你应该有编码标准.
您曾被迫遵循的最奇怪的编码标准规则是什么?
而最奇怪的是,我的意思是最有趣,或者最糟糕,或者只是简单的奇怪.
在每个答案中,请提及哪种语言,您的团队规模,以及它对您和您的团队造成的影响.
由于本答案中描述的原因,我经常在我的#defines中使用do-while(0)构造.此外,我正在尝试使用尽可能高的编译器警告级别来捕获更多潜在问题,并使我的代码更加健壮和跨平台.所以我通常使用-Wallgcc和/WallMSVC.
不幸的是,MSVC抱怨do-while(0)构造:
foo.c(36) : warning C4127: conditional expression is constant
Run Code Online (Sandbox Code Playgroud)
我应该怎么做这个警告?
只是为所有文件全局禁用它?对我来说这似乎不是一个好主意.
当我使用带有"警告级别4"的Visual C++ 9编译C++代码时,如下所示:
while( true ) {
//loop body with break on certain condition
}
Run Code Online (Sandbox Code Playgroud)
以下内容:
for( ; true; ) {
//same loop body
}
Run Code Online (Sandbox Code Playgroud)
两者都触发C4127: conditional expression is constant警告,但以下内容:
for( ; ; ) {
//same loop body
}
Run Code Online (Sandbox Code Playgroud)
编译时没有警告.
为什么会出现这种差异,尤其是第二种和第三种变体之间?