C as a Subset of C : Exceptions Explained
While it's often stated that C is a subset of C , there are certain instances where code may compile seamlessly in C but fail in C .
Cases where Code Fails in C
Tentative Definitions:
C allows multiple declarations of the same variable name, but C prohibits this with the error "n already defined."
int n; int n; // error: redeclaration of 'n'
Incompatible Array Types:
C allows assigning arrays to pointers with different types (e.g., int[1] to int *()), while C disallows such conversions.
int a[1]; int (*ap)[] = &a; // error: 'a' does not have type 'int[]'
K&R Function Definition Style:
C permits function definitions using the syntax int b(a) int a; { }, but C considers it a grammar error.
int b(a) int a; { } // error: grammar error
Nested Struct Scope:
C enables declaring nested structs with class-scope, but C treats them as local variables instead.
struct A { struct B { int a; } b; int c; }; struct B b; // error: 'b' has incomplete type
Default Declarations:
C allows declaring variables without specifying their type (e.g., auto a;), but C requires an explicit type-specifier.
auto a; // error: type-specifier missing
Additional Exceptions in C99
Array Dimensions in Parameters:
C99 prohibits specifiers like static in array dimensions of function parameters.
void f(int p[static 100]) { } // error: invalid syntax
Variable Length Arrays:
C99 does not support variable length arrays (VLAs) where array sizes are computed at runtime.
int n = 1; int an[n]; // error: 'n' is not a constant expression
Flexible Array Members:
C99 lacks flexible array members (FAMs) that can have variable-sized data members within structs.
struct A { int a; int fam[]; }; // error: 'fam' has incomplete type
Restrict Qualifier:
C99 allows the restrict qualifier to specify non-aliasing of memory, which C does not support.
void copy(int *restrict src, int *restrict dst); // error: two names for one parameter
The above is the detailed content of Why Does Some C Code Fail to Compile in C ?. For more information, please follow other related articles on the PHP Chinese website!