问题标签 [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.

0 投票
4 回答
2961 浏览

visual-studio-2005 - VS2005下奇怪的“警告C4127:条件表达式是常数”

我正在尝试编译带有第 4 级警告的LightZPng。我在明显不值得此警告的行上得到了很多 C4127。一个例子:

如何更改此代码以避免#pragma 以外的警告?

0 投票
2 回答
3447 浏览

c - 为什么在“while”中使用常量时,MSVC 会生成警告 C4127 - C

对于代码,

MSVC 生成以下警告。

警告的MSDN页面建议使用for(;;)而不是while(1). 我想知道有什么好处for(;;),为什么它会警告不断使用 in while

我应该在 GCC 上使用什么标志来获得相同的警告?

0 投票
2 回答
5911 浏览

c++ - 如何禁用 C4127 for do {} while(false)

可能重复:
C/C++:如何使用 do-while(0); 构造没有像 C4127 这样的编译器警告?

如您所见,警告与do {} while(false).

我只能想出以下方法来禁用警告:

但我不喜欢这个解决方案。

我还尝试将这些宏放入 error.h 中而没有效果。

关于如何以体面的方式抑制此警告的任何评论?

谢谢

0 投票
2 回答
4330 浏览

c++ - CppUnit 预期异常与 Assert Throw 编译并带有警告 C4127

目前我正在使用 CppUnit 用 C++ 编写单元测试。最近我需要使用 CppUnits 宏检查在特定情况下是否引发了异常:

测试编译期间的警告让我感到惊讶(在 VS2010 上,但对其他编译器也会发出警告......):

我查看了 CppUnit 的宏定义,发现如下:

好吧,我完全理解这是如何工作的,do while 循环只执行一次,因为 false,并且 break 用于不执行 Asserter::fail() 部分。但是他们为什么要这样做呢?它 - 当然 - 触发编译器警告,因为 while 循环的中断条件显然总是“假”。但是没有更优雅的方法来做到这一点吗?我通常坚持无警告编译原则,所以这真的让我很烦恼。

所以我的问题真的是,他们为什么不这样实现它:

提前致谢!

-汉内斯

0 投票
6 回答
16782 浏览

c++ - C4127:条件表达式为常数

以下代码在 Visual Studio 2010 中生成警告 C4127(条件表达式为常量)(其中 alias_wchar_t 是 wchar_t 的别名):

除了抑制警告之外,解决此问题的最优雅方法是什么?

我想出的最佳解决方案是将条件填充到静态布尔值中,并将其用作条件。if-else 的上方和下方都有大量代码,所以我将整个代码用大括号括起来,以尽可能地限制变量的范围:

不过这感觉很恶心。这似乎应该在编译时而不是运行时解决,但预处理器不知道 sizeof。有没有更干净、更优雅的方法来解决这个问题?

0 投票
2 回答
3825 浏览

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完全没用,也不会激发丑陋的代码吗?这个警告是否有助于编写更好的代码?

0 投票
2 回答
631 浏览

c++ - 警告 C4127:条件表达式在 cl 命令中是常量

当我尝试编译上述程序时if(VALUE_MAX)显示警告

条件表达式是常数。

如何解决上述警告?