sha*_*oth 27 c++ compiler-construction compiler-warnings
这个问题不受任何特定编译器警告的约束,以下只是一个例子.
目前我想要一个检查内部退出条件的循环:
while( true ) {
doSomething();
if( condition() ) {
break;
}
doSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)
我不能在Visual C++中编写它 - 它会发出C4127 conditional expression is constant
警告.编译器会在我脸上挥动它,虽然很明显它while(true)
不能被意外地写出来.
假设我想要编译而没有警告的代码.我的服务有各种解决方法.
解决方法是使用for(;;)
但感觉很愚蠢 - 为什么我想要那个奇怪的东西而不是简洁优雅的惯用语while(true)
?解决方法二是在行#pragma warning( suppress)
之前使用,while( true )
但它添加了一个巨大的横幅,它是while
-statement本身的两倍.解决方法三是为整个项目禁用C4127(我已经看到它在一个真实项目中完成)但是所有可能的C4127实例也被禁用.
是否有任何优雅的方法来摆脱毫无意义的警告?
Mar*_*ers 11
for(;;)
即使没有那个警告,我也会去.这不是愚蠢的:它是一个没有条件的循环,这正是你想表达的.
对我而言,这似乎比使用while循环更合乎逻辑,并且每次循环测试都是真的(当然编译器会优化掉这个测试,所以它实际上不会影响性能).
可能 - 实际可实现 - 更优雅的一行:
#pragma warning ( suppress : 4127 )
Run Code Online (Sandbox Code Playgroud)
(我不能使用它,因为我仍然在VS2005上,这对所有警告都不起作用.)
当然,对于你的情况for(;;)
可能是务实的方法,但总的来说
如何优雅地克服无意义的 C++编译器警告?
如何优雅地克服假阳性 C++编译器警告?
我会说,单个预处理器行似乎已经很好了.