if 语句无条件

If statement without condition

请问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) 是什么意思?

在 C 中,所有具有 0 值的整数类型的计算结果为 false,否则它们的计算结果为 true。请注意,即使是负数也会计算为真。

在您的情况下,如果 n 保持为 0,则 if 语句的主体将不会执行,因为表达式的计算结果为 false。如果 n 设置为 0 以外的其他值,则 if 语句主体将执行。

在C语言中,boolean类型是用整数来表示的,所以每个正数都被认为是boolean true,只有整数0被认为是boolean false。

根据 C11 标准文档,第 6.8.4 章,选择语句

if ( expression ) statement

A selection statement selects among a set of statements depending on the value of a controlling expression.

从第 6.8.4.1 章开始,if 语句

In both forms, the first substatement is executed if the expression compares unequal to 0.

所以,基本上,在这里,if(n)

  • 如果if(n)结果为真(n不等于0,包括+ve-ve值)则执行下一条语句(块)
  • 如果if(n)结果为FALSE(n等于0)则跳过下一条语句(块)

您似乎误解了条件的含义。条件不一定包含比较器,例如 ==< 等。条件可以是任何表达式。现在,如果 if 表达式的计算结果为零值,则认为它是假的,并且不会计算 if 语句。否则,它被认为是 true 并且 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) returns true 和 !!(false) returns false。因此,当整数可能存储错误代码并希望将其结果规范化为布尔值并且它很短时,它有时很有用,但我建议将其写出来以便清楚。 (ie; if (i != 0) 而不是 if (i))

希望以下内容对您有所帮助。

    int i1 = -50, i2 = 0, i3 = 50;
    if (i1) 
        printf("if(-50) passed\n");
    if (i2) 
        printf("if(0) passed\n");
    if (i3) 
        printf("if(50) passed\n");
    if (!!i1)
        printf("if(!!-50) passed\n");
    if (!!i2)
        printf("if(!!0) passed\n");
    if (!!i3)
        printf("if(!!50) passed\n");
    if (!!true)
        printf("if(!!true) passed\n");
    if (!!false)
        printf("if(!!false) passed\n");

然后我们得到以下内容。

OUTPUT:

if(-50) passed
if(50) passed
if(!!-50) passed
if(!!50) passed
if(!!true) passed