Home >Backend Development >C++ >Why Does Some C Code Fail to Compile in C ?

Why Does Some C Code Fail to Compile in C ?

DDD
DDDOriginal
2024-12-18 10:16:10481browse

Why Does Some C Code Fail to Compile in C  ?

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn