On 09/06/2025 12:13, Andreas Schwab wrote:
On Jun 09 2025, Chris Bazley via Gcc wrote:

C is a language that allows considerable latitude in where things are placed:

     static int volatile p;
     volatile int static q;

C23 says (6.11.5 Storage-class specifiers):

     The placement of a storage-class specifier other than at the
     beginning of the declaration specifiers in a declaration is an
     obsolescent feature.


C90 has the same paragraph under "Future language directions". Killing off obsolescent features in C takes a /long/ time. C23 did manage to drop non-prototype function declarations and K&R-style function definitions, which also were market obsolescent in C90.


The latitude that C allows for ordering in declarations comes from two main sources. Sometimes it is because it was thought that it made the syntax and grammar rules of the language simpler. But mostly it was because the original C standard was formed from existing practice - existing inconsistent C compilers, and existing inconsistent C source code. It allowed "static int volatile" and "volatile int static" because enforcing an order - /any/ order - would make significant existing C code incorrect with the new standard. It was not done for good language design - it was done despite it being a bad feature for the language.


So while correcting the mistakes of the past is either very slow or impossible, we can avoid them in the future. Consistent parameter order makes code clearer and neater, and should be encouraged.

David


Reply via email to