Sujet : Oh d-ai-ry d-ai-ry me
De : rjh (at) *nospam* cpax.org.uk (Richard Heathfield)
Groupes : comp.lang.cDate : 30. May 2025, 21:01:50
Autres entêtes
Organisation : Fix this later
Message-ID : <101d2re$l1ta$1@dont-email.me>
User-Agent : Mozilla Thunderbird
This evening I accidentally bumped into a chatbot, and I wondered whether it was any good at C programming.
I was impressed when it solved Goldbach's Conjecture (admittedly for small n) and 5-disc Hanoi, but then I thought back to a recent thread here (which I have no intent of resurrecting), so I asked it if it could have saved me a job if I'd only asked it a few hours ago.
Judge for yourselves!
I asked: "Write a program that is valid C90 but invalid C99."
ChatGPT said:
Certainly! To illustrate this, I'll write a C program that is valid in C90 but invalid in C99. The key difference between C90 and C99 revolves around variable declaration and initialization.
Key Issue:
In C90, variables can only be declared at the beginning of a block (before any executable code).
In C99, variables can be declared anywhere within a block, even between statements.
C Program Example:
This program is valid in C90 but invalid in C99 because the variable x is declared after executable code.
#include <stdio.h>
int main() {
printf("Hello, world!\n");
int x = 5; // Declaration after executable code (invalid in C99)
printf("x = %d\n", x);
return 0;
}
Why it’s Valid in C90:
In C90, all variable declarations must appear at the beginning of a block (before any code). This program would be valid in C90 because x is declared after the printf statement, but only the declaration of x itself breaks the rule in C99.
Why it’s Invalid in C99:
In C99, variables can be declared anywhere within a block, even after executable statements (not just at the beginning of a block). This is why the above code would cause an error in C99, as the variable x is declared after a statement (printf).
Compilation Example:
If you compile this program with a C99 compiler (e.g., GCC), you'll get an error similar to this:
error: variable 'x' declared after statement
To summarize:
C90 allows this style (declaration after code).
C99 does not allow it, so the program becomes invalid.