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
Release: 2024-12-18 10:16:10
Original
415 people have browsed it

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'
    Copy after login
  • 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[]'
    Copy after login
  • 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
    Copy after login
  • 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
    Copy after login
  • 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
    Copy after login

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
    Copy after login
  • 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
    Copy after login
  • 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
    Copy after login
  • 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
    Copy after login

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!

source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template