Thomas Koenig <tkoe...@netcologne.de> writes: > C99, 6.7.2, "Type specifiers" > > # Constraints > > # At least one type specifier shall be given in the declaration > # specifiers in each declaration, and in the specifier-qualifier > # list in each struct declaration and type name.
And? > In C99 and onwards, this is an error (a violation of a "shall" > directive). There are no ``errors'' in Standard C (with the possible exception of the #error preprocessing directive), only constraint and syntax rule violations. Such violations are required to generate diagnostic messages, after which the behavior of the translator ceases to be defined by the Standard, but GNU C defines it to mean that the type is int. Nor does GCC conform to the Standard by default: while it is okay for a conforming implementation to translate programs relying on implicit int, as there is no way doing so will alter the behavior of any strictly conforming program, it is not okay to reserve keywords such as `asm'. The following strictly conforming program is thus not acceptable to GCC, unless GCC is operating in standards-conformance mode: int main (argc, argv) int argc; char **argv; { int asm; return asm = 0; } which shows that debating features based on the Standard is entirely pointless, as the Standard allows implementations to provide almost anything it prohibits. So I ask you again: what is unclear about declarations which are implicitly int, in a way that is likely to cause program errors?