我对IF()表达式之后需要大括号感到困惑。
当使用IF(){...} ELSE {...}时,我习惯在IF和ELSE块周围使用大括号。
但是当我没有使用ELSE块时,它没有支撑,并且没有括号:
作品:IF()...
失败:IF(){...}
以下示例,这是针对微控制器的
#include "simpletools.h"
int main()
{
while(1)
{
print("button = %d\n", input(3));
if(input(3) == 1) //works if no braces
high(14);
pause(50);
low(14);
pause(50);
} //while
} // main
答案 0 :(得分:4)
if
之后的单个陈述。如果您需要多个语句,则必须将它们合并为一个复合语句。
if (input(3) == 1)
high(14);
pause(50);
low(14);
pause(50);
无论pause
返回什么,都会执行low
个函数和input
。放置换行符的位置不会影响C解析代码的方式。您需要大括号将4个函数调用组合成一个复合语句:
if (input(3) == 1) {
high(14);
pause(50);
low(14);
pause(50);
}
缺少或存在else
子句不会改变任何内容,除了
if (input(3) == 1)
high(14);
pause(50);
else ...
会导致错误,因为else
未加入任何if
语句; if
以单个语句high(14)
结束,而pause(50)
完全是一个单独的声明,因此else
不合适。
答案 1 :(得分:2)
if和else子句都只控制紧随其后的语句。正确缩进的代码实际上是:
#include "simpletools.h"
int main()
{
while(1)
{
print("button = %d\n", input(3));
if(input(3) == 1)
high(14);
pause(50);
low(14);
pause(50);
} //while
} // main
两个陈述可能在同一条线上这一事实无关紧要; if仍然只控制一个语句。如果要控制两个或多个语句,则必须使用大括号将它们包装在“复合语句”中:
#include "simpletools.h"
int main()
{
while(1)
{
print("button = %d\n", input(3));
if(input(3) == 1) {
high(14);
pause(50);
} else {
low(14);
pause(50);
}
} //while
} // main
由于else必须紧跟if的受控语句,因此在没有括号的双语句行之后插入它将不起作用。
答案 2 :(得分:0)
作品的方式是if (condition) stmt1;
;如果条件为真,如果要执行多于1个语句,则需要用{}包装它们。我怀疑当你说你的代码没有大括号“工作”时,你的意思是它编译,但执行将与你在{}中包装4个语句时的执行情况完全不同。回想一下,C没有给出关于缩进的图。
答案 3 :(得分:0)
标识(空格或换行符的数量)绝对没有编译器的意义。没有大括号,只有下一条指令被if。
覆盖if (a)
DoSomething(); DoSomethingelse();
MoreToDo();
实际上意味着:
if (a)
{
DoSomething();
}
DoSomethingelse();
MoreToDo();
Tipp:始终在“;”之后开始换行,提高可读性。有些人还建议总是使用大括号,这样可以进一步减少这种错误。
答案 4 :(得分:-1)
如果input(3)==1
,则会调用high(14);
。
但是pause(50);low(14);pause(50);
将永远执行,尽管从input(3)