警告 C4127:条件表达式在 cl 命令中是常量
Posted
技术标签:
【中文标题】警告 C4127:条件表达式在 cl 命令中是常量【英文标题】:warning C4127: conditional expression is constant in cl command 【发布时间】:2015-07-03 05:53:24 【问题描述】:#define Val_MAX 0
int main()
if(Val_MAX)
printf("The value is %d",VALUE_MAX);
return 0;
当我尝试编译上述程序时,if(VALUE_MAX)
显示警告
条件表达式是常量。
如何解决上述警告?
【问题讨论】:
选择if(Val_MAX)
和printf
行。现在点击删除键删除它们,只保留return 0;
,这就是所有这一切无论如何都会做的。
如果使用 C++ 或 C99 或更高版本,您也可以省略 return 0;
。
@MohitJain 哇,从来不知道c4127
本身存在标签。谢谢。 :-)
@SouravGhosh 我为我的问题创建它(害羞)
@MohitJain 好吧,这个身材的问题值得它自己的标签。 :-)
【参考方案1】:
在您的代码中,Val_MAX
是 #define
d 到 0
的值
if(Val_MAX)
其实是(预处理后可以用gcc -E
查看)
if(0)
这没有任何价值。以下printf()
永远不会执行。
FWIW,像if
这样的选择语句需要一个表达式,预期将在运行时对其进行值评估。对于固定值,选择语句没有意义。它最有可能最终成为“始终正确”或“始终错误”的案例。
一种可能的解决方案: [通过选择语句的一些实际用法]
将Val_MAX
设为变量,要求用户输入值,然后使用它。伪代码看起来像
#include <stdio.h>
int main(void)
int Val_MAX = 0;
printf("Enter the value of Val_MAX\n");
scanf("%d", &Val_MAX);
if(Val_MAX)
printf("The value is %d",VALUE_MAX);
return 0;
【讨论】:
@user2931858 不是编译器的问题,是if
的用法。【参考方案2】:
您的 preprocessor directive
将替换 VAL_MAX
为 0
它变为
if(0)
所以无论如何它总是错误的,你的printf
不会执行,所以if
条件是没有用的
【讨论】:
以上是关于警告 C4127:条件表达式在 cl 命令中是常量的主要内容,如果未能解决你的问题,请参考以下文章