From my understanding you need opening and closing braces for any 'standard construct in the language' (eg. a for loop/if statement etc. I don't know the real word for it) that contains multiple statements. So, why is this K&R C valid...
while((len = getline(line, MAXLINE)) > 0)
if(len > max) {
max = len;
copy(longest, line);
}
There's no braces on the while loop however, it does contain multiple statements (when the if is true). This is from example 1.9 in the 2nd edition of K&R's The C Programming Language.