Rumah > pembangunan bahagian belakang > C++ > Mengapa Beberapa Kod C Gagal Disusun dalam C?

Mengapa Beberapa Kod C Gagal Disusun dalam C?

DDD
Lepaskan: 2024-12-18 10:16:10
asal
476 orang telah melayarinya

Why Does Some C Code Fail to Compile in C  ?

C sebagai Subset C : Pengecualian Diterangkan

Walaupun selalunya dinyatakan bahawa C ialah subset C , terdapat keadaan tertentu di mana kod mungkin disusun dengan lancar dalam C tetapi gagal dalam C .

Kes di mana Kod Gagal dalam C

  • Definisi Tentatif:
    C membenarkan berbilang pengisytiharan nama pembolehubah yang sama, tetapi C melarang ini dengan ralat "n sudah ditakrifkan."

    int n;
    int n; // error: redeclaration of 'n'
    Salin selepas log masuk
  • Turutan Tidak Serasi Jenis:
    C membenarkan menetapkan tatasusunan kepada penunjuk dengan jenis yang berbeza (cth., int[1] kepada int *()), manakala C tidak membenarkan penukaran tersebut.

    int a[1];
    int (*ap)[] = &a; // error: 'a' does not have type 'int[]'
    Salin selepas log masuk
  • Gaya Definisi Fungsi K&R:
    C membenarkan definisi fungsi menggunakan sintaks int b(a) int a; { }, tetapi C menganggapnya sebagai ralat tatabahasa.

    int b(a) int a; { } // error: grammar error
    Salin selepas log masuk
  • Skop Struktur Bersarang:
    C membolehkan pengisytiharan struct bersarang dengan skop kelas, tetapi C menganggapnya sebagai pembolehubah tempatan sebaliknya.

    struct A { struct B { int a; } b; int c; };
    struct B b; // error: 'b' has incomplete type
    Salin selepas log masuk
  • Pengisytiharan Lalai:
    C membenarkan pengisytiharan pembolehubah tanpa menyatakan jenisnya (cth., auto a;), tetapi C memerlukan eksplisit penentu jenis.

    auto a; // error: type-specifier missing
    Salin selepas log masuk

Pengecualian Tambahan dalam C99

  • Dimensi Tatasusunan dalam Parameter:
    C99 melarang penentu seperti statik dalam pelbagai dimensi fungsi parameter.

    void f(int p[static 100]) { } // error: invalid syntax
    Salin selepas log masuk
  • Tatasusunan Panjang Boleh Ubah:
    C99 tidak menyokong tatasusunan panjang berubah (VLA) di mana saiz tatasusunan dikira semasa masa jalan.

    int n = 1;
    int an[n]; // error: 'n' is not a constant expression
    Salin selepas log masuk
  • Turutan Fleksibel Ahli:
    C99 tidak mempunyai ahli tatasusunan fleksibel (FAM) yang boleh mempunyai ahli data bersaiz berubah dalam struct.

    struct A { int a; int fam[]; }; 
    // error: 'fam' has incomplete type
    Salin selepas log masuk
  • Kelayakan Had:
    C99 membenarkan kelayakan sekatan untuk menentukan bukan pengaliasian memori, yang C tidak sokongan.

    void copy(int *restrict src, int *restrict dst); // error: two names for one parameter
    Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa Beberapa Kod C Gagal Disusun dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan