On 31/05/2025 12:02, Janis Papanagnou wrote:
Probably not, as my C90/C99 test more or less illustrated. It 'knew' of
a syntax rule, but failed to apply it correctly.
I just tried again, this time asking for a C90 program to produce a
frequency count of colours in a 24-bit bitmap.
It took three laps to make it C90-legal.
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.
Sysop: | DaiTengu |
---|---|
Location: | Appleton, WI |
Users: | 1,073 |
Nodes: | 10 (0 / 10) |
Uptime: | 222:34:34 |
Calls: | 13,783 |
Calls today: | 1 |
Files: | 186,987 |
D/L today: |
701 files (242M bytes) |
Messages: | 2,434,871 |