【发布时间】:2020-03-20 17:09:04
【问题描述】:
为什么我运行它时看不到任何显示?我期待 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$
【问题讨论】:
-
缩进无关紧要。 C++ 不是 Python。
-
请阅读What should main() return in C and C++? TL;DR:
void main()不好,您应该使用int main(void)。 -
@S.S.Anne 或者甚至更好(在 C++ 中)
int main()void用于空参数列表是 C 主义 - 在 C++ 中不需要。但是是的,void main()显然是错误的。 -
这是一种众所周知的语法歧义,大多数语言(包括 C)通过将
else绑定到最接近的if来解决它。这个问题至少可以追溯到 Algol 60。这个问题的计算机科学术语是dangling else。
标签: c if-statement