首页 > 解决方案 > 如果没有括号如何处理 if 和 else?

问题描述

为什么我运行它时看不到任何显示?我期待EINVAL被打印而不是什么都没有。

#include <stdio.h>

unsigned int set_request(int val)
{
    printf("set_request entry\n");
    return 0;
}


void main()
{
    unsigned int val = 2;

    if (val == 0 || val == 1)
        if (set_request(val))
            printf("EIO\n");
    else
        printf("EINVAL\n");
}
jj@coffy:~/nvmemaster/tmp$ ./a.out
jj@coffy:~/nvmemaster/tmp$

添加时我得到了正确的行为{},但我想知道if没有的行为{}

或者,如果我将赋值行修改为 0,如下所示,那么我会看到其他奇怪的东西。现在我没想到EINVAL会被打印出来。

#include <stdio.h>

unsigned int set_request(int val)
{
    printf("set_request entry\n");
    return 0;
}


void main()
{
    unsigned int val = 0;

    if (val == 0 || val == 1)
        if (set_request(val))
            printf("EIO\n");
    else
        printf("EINVAL\n");
}
jj@coffy:~/nvmemaster/tmp$ gcc if.c
jj@coffy:~/nvmemaster/tmp$ ./a.out
set_request entry
EINVAL
jj@coffy:~/nvmemaster/tmp$

标签: cif-statement

解决方案


else绑定到最里面的if. 所以这:

if (val == 0 || val == 1)
    if (set_request(val))
        printf("EIO\n");
else
    printf("EINVAL\n");

实际上是一样的:

if (val == 0 || val == 1) {
    if (set_request(val)) {
        printf("EIO\n");
    } else {
        printf("EINVAL\n");
    }
}

else正确绑定子句需要大括号。因此,最好始终将它们与if...一起使用else以避免混淆。


推荐阅读