Ketidaklengkapan C: Di mana C Mencapah daripada Subsetnya
Walaupun sering mendakwa bahawa C terkandung sepenuhnya dalam C , perbezaan yang halus menyebabkan ini penegasan tidak lengkap. Artikel ini menyerlahkan keadaan di mana kod yang boleh diterima dalam C menjadi tidak serasi dalam C , menjelaskan perbezaan yang membezakannya.
Kepastian Rumit
C menguatkuasakan peraturan yang lebih ketat untuk pembolehubah definisi, melarang tentatif. Mengisytiharkan pembolehubah yang sama berulang kali, seperti dalam int n; int n;, tidak dibenarkan dalam C , tidak seperti dalam C.
Ketaksamaan Keserasian Tatasusunan
C memperkenalkan kekangan keserasian jenis yang tidak wujud dalam C. Dalam C, tatasusunan int a[1] boleh diberikan kepada int penunjuk (*ap)[] = &a, walaupun daripada jenis yang berbeza (int[] lwn. int[1]). Tugasan ini akan gagal dalam C .
Takrifan Fungsi Usang
C meninggalkan gaya definisi fungsi K&R, menjadikan binaan seperti int b(a) int a; { } sintaksis tidak betul.
Perbezaan Skop Struktur Bersarang
Struktur bersarang dalam C mempunyai skop kelas, tidak seperti dalam C. Akibatnya, mengisytiharkan struct bersarang di luar struct bersama takrifan, seperti struct B b;, menghasilkan ralat jenis yang tidak lengkap dalam C .
Penentukan Jenis Eksplisit Diperlukan
C mewajibkan penentu jenis eksplisit untuk semua pengisytiharan. Meninggalkan maklumat jenis, seperti dalam auto a;, membawa kepada ralat sintaks.
C99 Menyumbang Percanggahan Selanjutnya
C99 memperkenalkan ketidakserasian tambahan:
Atas ialah kandungan terperinci Bagaimanakah Peraturan C yang Lebih Tegas Berbeza daripada Pendekatan C yang Lebih Berlembut?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!