问题标签 [c4127]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
visual-studio-2005 - VS2005下奇怪的“警告C4127:条件表达式是常数”
我正在尝试编译带有第 4 级警告的LightZPng。我在明显不值得此警告的行上得到了很多 C4127。一个例子:
如何更改此代码以避免#pragma 以外的警告?
c - 为什么在“while”中使用常量时,MSVC 会生成警告 C4127 - C
对于代码,
MSVC 生成以下警告。
警告的MSDN页面建议使用for(;;)
而不是while(1)
. 我想知道有什么好处for(;;)
,为什么它会警告不断使用 in while
?
我应该在 GCC 上使用什么标志来获得相同的警告?
c++ - 如何禁用 C4127 for do {} while(false)
如您所见,警告与do {} while(false)
.
我只能想出以下方法来禁用警告:
但我不喜欢这个解决方案。
我还尝试将这些宏放入 error.h 中而没有效果。
关于如何以体面的方式抑制此警告的任何评论?
谢谢
c++ - CppUnit 预期异常与 Assert Throw 编译并带有警告 C4127
目前我正在使用 CppUnit 用 C++ 编写单元测试。最近我需要使用 CppUnits 宏检查在特定情况下是否引发了异常:
测试编译期间的警告让我感到惊讶(在 VS2010 上,但对其他编译器也会发出警告......):
我查看了 CppUnit 的宏定义,发现如下:
好吧,我完全理解这是如何工作的,do while 循环只执行一次,因为 false,并且 break 用于不执行 Asserter::fail() 部分。但是他们为什么要这样做呢?它 - 当然 - 触发编译器警告,因为 while 循环的中断条件显然总是“假”。但是没有更优雅的方法来做到这一点吗?我通常坚持无警告编译原则,所以这真的让我很烦恼。
所以我的问题真的是,他们为什么不这样实现它:
提前致谢!
-汉内斯
c++ - C4127:条件表达式为常数
以下代码在 Visual Studio 2010 中生成警告 C4127(条件表达式为常量)(其中 alias_wchar_t 是 wchar_t 的别名):
除了抑制警告之外,解决此问题的最优雅方法是什么?
我想出的最佳解决方案是将条件填充到静态布尔值中,并将其用作条件。if-else 的上方和下方都有大量代码,所以我将整个代码用大括号括起来,以尽可能地限制变量的范围:
不过这感觉很恶心。这似乎应该在编译时而不是运行时解决,但预处理器不知道 sizeof。有没有更干净、更优雅的方法来解决这个问题?
c++ - `warning C4127`(条件表达式是常量)有用吗?
在回答这篇文章时,我建议使用do {...} while(0)
多行宏。
在 MSVC 上,我发现这段代码抛出:
为了使代码无警告,我需要选择以下丑陋的替代方案之一:
选项1
选项 2
将我的宏定义为:
或者
一些程序员也将其称为“猫头鹰”,因为(0,0)
它看起来像猫头鹰。
选项 3
定义一个不会生成警告的新宏 WHILE_0 并使用它来代替while(0)
问题
我相信所有的选择或多或少都是可怕的。为什么 MSVC 会为看似正确的代码生成此警告,并激励我在代码中添加一些丑陋以保持代码警告免费?
我相信条件中的常量表达式是完全有效和有用的,特别是在基于编译器优化代码能力的构造中。
此外,我没有得到这样warning C4127
的代码:
我的问题是:这不是warning C4127: conditional expression is constant
完全没用,也不会激发丑陋的代码吗?这个警告是否有助于编写更好的代码?
c++ - 警告 C4127:条件表达式在 cl 命令中是常量
当我尝试编译上述程序时if(VALUE_MAX)
显示警告
条件表达式是常数。
如何解决上述警告?