This came up recently in talks about style in sbase due to my misunderstanding of "Do not mix declarations and code" and subsequent addition of the line "All variable declarations at top of block" in the style guide.
It was my understanding that "Do not mix declarations and code" meant stick to ANSI C declarations. ANSI C allows declarations of variables only at the top of blocks, but allows them in any block so they aren't relegated to the top of the function. It was pointed out to me that "Do not mix declarations and code" is stricter and means that all variables must be declared at the top of the function. Declaring variables at the top of a block, as opposed to top of the function has a few uses, but the most useful (in my limited experience) is combining it with C99's variable length arrays to create buffers without calls to malloc/free. For example: while ((d = readdir(dp))) { char buf[strlen(path) + strlen(d->d_name) + 1]; .... } vs while ((d = readdir(dp))) { buf = emalloc(strlen(path) + strlen(d->d_name) + 1]; .... free(buf); } Thoughts? -emg