Why enclose blocks of C code in curly braces? Why enclose blocks of C code in curly braces? c c

Why enclose blocks of C code in curly braces?


Legacy code needed { } in order to do declarations at all

In C89, you couldn't just do int i; anywhere; declarations were only valid at the beginning of blocks.

So:

a = 1;int i; /* error */i = 2;

...wasn't valid, but

a = 1if (e) {  int i;

...was fine, as was a plain block.

The resulting style continued even after declarations became valid (C99) block-item(s), partly by inertia, partly for backwards portability, and also because it makes sense to establish a scope for new declarations.


To scope variables. E.g. the variable tmp_argv will only be valid between the braces.


Another use case for this I've recently discovered is when you have open/close semantics and you want to clearly mark the 'inner' code:

f = fopen('file');{    // do stuff}fclose(f);

This works well to remind you to close/free objects and a makes the code somewhat cleaner.