I\'m confused on need for braces after IF() expression. When using IF(){...}ELSE{...} I\'m used to using braces around both IF and ELSE blocks. But when I use no ELSE block it
Both the if and else clauses control only the immediately following statement. Your code, indented correctly, is actually:
#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
The fact that two statements may be on the same line is irrelevant; the if still only controls a single statement. If you want to control two or more statements, you must wrap them in a "compound statement" by using braces:
#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
Since the else must immediately follow the if's controlled statement, inserting it after your two-statement line without braces won't work.
If input(3)==1
then high(14);
will be called.
But pause(50);low(14);pause(50);
will always be executed despite the return from input(3)
The way if works is if (condition) stmt1;
; if you want more than 1 statement to be executed if the condition is true, you need to wrap them up with {}. I suspect when you say your code "works" with no braces, you mean it compiles, but the execution will be quite different than if you wrapped the 4 statements in {}. Recall that C doesn't give a fig about indentation.
A single statement follows the if
. If you need multiple statements, they must be combined into a single compound statement.
if (input(3) == 1)
high(14);
pause(50);
low(14);
pause(50);
executes both pause
functions and low
regardless of what input
returns. Where you put the newlines does not affect how C parses the code. You need braces to combine the 4 function calls into a single compound statement:
if (input(3) == 1) {
high(14);
pause(50);
low(14);
pause(50);
}
The absence or presence of an else
clause does not change anything, except that
if (input(3) == 1)
high(14);
pause(50);
else ...
would result in an error, since the else
is not joined to any if
statement; the if
concludes with the single statement high(14)
, and the pause(50)
is a separate statement altogether, so the else
is out of place.
The identation (number of spaces or newlines) has absolutelly no meaning to the compiler. Without braces, only the very next instruction is covered by the if.
if (a)
DoSomething(); DoSomethingelse();
MoreToDo();
Actually means:
if (a)
{
DoSomething();
}
DoSomethingelse();
MoreToDo();
Tipp: Always start a newline after ";", Improves readability. Some people also suggest to always use the braces, that further reduces errors such as this one.