c - 如果没有括号如何处理 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$
解决方案
将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
以避免混淆。
推荐阅读
- apache - 在同一主机上为 Angular 和 Tomcat 配置 Apache
- php - 如何根据页面重定向用户?
- c# - 如何使用动态名称设置 Discord Bot 命令
- java - 为什么firestore查询循环没有按顺序返回?
- flutter - 某些 Firebase 功能要求我在完成应用之前创建一个结算帐户?
- vue.js - 点击时触发命名组件并管理点击关闭元素
- r - 对 Normal 和 Beta 做的正是对 Gamma 函数所做的事情
- css - CSS将页脚粘贴到窗口底部并完全填充剩余空间
- firebase - 在 pom.xml 中添加依赖后 com.google.firebase 仍然无法识别
- javascript - 使用 GoJS 创建层次结构