Pengecualian Keserasian C99 dan C
Walaupun C secara amnya merupakan subset C , nuansa tertentu dalam bahasa C melarang penyusunan langsung beberapa kod C yang sah. Berikut ialah beberapa perbezaan utama untuk dipertimbangkan:
1. Tiada Definisi Tentatif
C membenarkan berbilang pengisytiharan pembolehubah dengan nama yang sama, tetapi C tidak. Akibatnya, kod berikut, yang sah dalam C, tidak akan disusun dalam C :
int n; int n; // ill-formed: n already defined
2. Jenis Tatasusunan Tidak Serasi
Dalam C, tatasusunan boleh diisytiharkan sama ada dengan sintaks int[] atau int[N]. Walau bagaimanapun, C melayan ini secara berbeza. Kod berikut, yang sah dalam C, akan menimbulkan ralat dalam C :
int a[1]; int (*ap)[] = &a; // ill-formed: a does not have type int[]
3. Gaya Definisi Fungsi K&R Tidak Dibenarkan
C menyokong gaya definisi fungsi K&R, tetapi C tidak. Kod berikut, yang sah dalam C, tidak akan disusun dalam C :
int b(a) int a; { } // ill-formed: grammar error
4. Perbezaan Skop Struktur Bersarang
Dalam C, struct bersarang mempunyai skop fail, manakala dalam C , ia mempunyai skop kelas. Ini bermakna kod berikut, yang sah dalam C, tidak akan disusun dalam C :
struct A { struct B { int a; } b; int c; }; struct B b; // ill-formed: b has incomplete type (*not* A::B)
5. No Default int
C tidak membenarkan pembolehubah integer lalai kepada int, tidak seperti C. Oleh itu, kod berikut, yang sah dalam C, akan menimbulkan ralat dalam C :
auto a; // ill-formed: type-specifier missing
Pengecualian Tambahan dalam C99
Selain pengecualian ini, C99 memperkenalkan ketidakserasian lanjut dengan C :
Atas ialah kandungan terperinci Apakah Perbezaan Kod C99 dan C Menyebabkan Ralat Penyusunan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!