我想问一下C语言在以下方面的行为:
int n = 0;
.
.
// n in this block may change value to something else but a (positive) number
.
.
if(n)
{
// do something
}
.
.
那么当n
是整数时,if(n)
意味着什么?
根据C11
标准文档第6.8.4章,选择语句,
if ( expression ) statement
选择语句根据控制表达式的值在一组语句中进行选择。
和6.8.4.1章中的 if
语句
在这两种形式中,如果表达式的比较结果不等于0,则执行第一个子语句。
这里,if(n)
将
- 如果
if(n)
结果为TRUE (n
不等于0,包括+ve
和-ve
的值),执行下一条语句(块) - 如果
if(n)
结果为FALSE (n
等于0),跳过下一条语句(块)
在C语言中,布尔类型用整数表示,因此每个正数都被认为是布尔值true,只有整数0被认为是布尔值false。
在C语言中,所有值为0的整数类型的值都为false,否则为true。请注意,偶数的计算结果为真。
在您的例子中,如果n
仍然为0,则if语句体将不会执行,因为表达式的计算结果为false。如果n
被设置为0以外的值,If语句体将执行。
你似乎误解了condition的意思。条件不一定包含比较器,如==
或<
等。条件可以是任何表达式。现在,如果if表达式的计算结果为零,则认为它为假,并且不计算if语句。否则,则认为它为真,并计算if语句。
很难理解你在这里想问什么,但我将抛出我的2美分,你决定它是否有助于你理解if
语句的工作方式。
int uiStupidFunction(int num)
{
return num++;
}
int uiAnotherStupidFunction(int num)
{
return 0;
}
int main(void)
{
int n = 0;
// n in this block may change value to something else but a (positive) number
//suppose in this way
n = uiStupidFunction(10);
if(n)
{
printf("n = %d", n); //prints 10
//do something
}
n = uiAnotherStupidFunction(10);
if(n)
{
printf("n = %d", n); //prints?
//do something
}
else
{
printf("nHumpty Dumpty sat on a wall"); //
}
}
只是想添加if(i)将与if(!!i)相同,检查它是否非零。而if (!i)是检查是否为零。因为true为1,false为0,所以!!(true)返回true, !!(false)返回false。因此,当整数存储错误代码并希望将其结果规范化为布尔值时,它有时是有用的,并且它非常短,但我建议将其写出来,以便清晰。(即;If (i != 0)而不是If (i))
希望能有所帮助。
int i1 = -50, i2 = 0, i3 = 50;
if (i1)
printf("if(-50) passedn");
if (i2)
printf("if(0) passedn");
if (i3)
printf("if(50) passedn");
if (!!i1)
printf("if(!!-50) passedn");
if (!!i2)
printf("if(!!0) passedn");
if (!!i3)
printf("if(!!50) passedn");
if (!!true)
printf("if(!!true) passedn");
if (!!false)
printf("if(!!false) passedn");
然后我们得到以下内容:
OUTPUT:
if(-50) passed
if(50) passed
if(!!-50) passed
if(!!50) passed
if(!!true) passed