Saat ini saya sedang membaca konsep spesifikasi C11. Kata kunci baru yang diperkenalkan: _Bool, _Alignof, _Atomic
semua terasa seperti ekstensi khusus, bukan kata kunci yang dicadangkan seperti standar struct, union, int
.
Saya menyadari bahwa standar pada dasarnya terdiri dari ekstensi standar ... tapi tetap saja, ini mengerikan! Mungkin kita akan segera berakhir dengan __Long_Long_Reallylong_Integer_MSVC_2020_t
merayap dalam standar!
Apakah kompatibilitas kode non-standar merupakan satu-satunya alasan gaya kata kunci yang baru?
<stdbool.h>
file header implementasi C11 harus menyertakan makro preprosesor seperti#define bool _Bool
. Ini adalah solusi yang rapi karena mempertahankan kompatibilitas ke belakang, tetapi memungkinkan kode baru apa pun, termasuk file header baru, untuk menggunakan sintaksis yang lebih menarik.Jawaban:
Saya membayangkan bahwa kompatibilitas dengan kode standar sempurna adalah alasan yang lebih penting.
Jika Anda menambahkan kata kunci yang mungkin telah digunakan sebagai pengidentifikasi sah dalam kode sebelumnya, Anda membuat banyak kesedihan, kemungkinan kesalahan halus, terutama dalam C, bahasa dengan aturan penguraian yang rumit.
Jika pengidentifikasi ini digunakan sebagai antarmuka publik di suatu tempat, Anda menambahkan rasa sakit kepada semua pengguna perpustakaan yang malang, yang mungkin tidak menggunakan C sama sekali, tetapi memanggil perpustakaan dari Ruby, atau Python, dll.
Itu sebabnya kata kunci baru cenderung terlihat kurang seperti kata-kata yang bagus dan lebih seperti peretasan dengan orang yang memiliki peluang lebih kecil untuk menggunakan untuk tujuan lain.
sumber
Bool
pada kode legacy yang secara luas diterima sebagai Boolean tetapi tidak pernah benar-benar menjadi bagian dari standar C sehingga asumsi tersebut tidak aman untuk membuat.bool
akan lebih semangat C. Juga, saya tidak sepenuhnya yakin dengan jawaban ini, karena kata-kata jelek mungkin juga telah digunakan oleh kode non-standar. Dan mengubah gaya kata-kata membuat kata-kata standar lebih sulit untuk dikenali sekilas.bool
ditambahkan tanpa syarat ke bahasa, maka semua proyek yang memiliki versi mereka sendiri (sangat sah)bool
akan berhenti dikompilasi. Itu akan sangat merusak penerimaan revisi bahasa. Ini adalah alasan bahwa semua pengidentifikasi baru diambil dari perangkat yang dipesan (dengan demikian dimulai dengan_[capital]
). Karena ada juga permintaan besar untukbool
dirinya sendiri, ini telah ditambahkan sepertitypedef _Bool bool
pada<stdbool.h>
.stdbool.h
atau memperbarui typedef mereka sendiri ke tipe baru untuk mendukung kode lawas mereka.Nama-nama yang dimulai dengan garis bawah dan huruf kapital (dan apa pun dengan garis bawah ganda) dicadangkan untuk implementasi kompiler / perpustakaan standar dalam standar sebelumnya.
Dari Pengidentifikasi Cadangan dari C89 dan C99:
Jadi secara teori, kata kunci baru itu tidak boleh digunakan dalam kode apa pun yang ditulis sebelumnya dan yang mengarah pada kompatibilitas mundur yang lebih baik daripada nama sederhana, yang kemungkinan merupakan satu-satunya alasan.
sumber