[the old syntax] looks like a function definition nested inside another function
I dunno. It looks like a pretty common macro structure to me; see the recent RunEvery macro, for instance. ( http://arduino.cc/forum/index.php/topic,124974.0.html ) I've seen a lot of this sort of macro in major C programs (in some ways, it adds object-oriented behavior to C):
FOR_ALL_INTERFACES(idb) {
FOR_ALL_PACKETS_IN_Q(idb->ipQ) {
// Blah blah blah.
}
}
Your new syntax isn't valid in C code...
And the old form is avr-libc "standard", extending well beyond Arduino.