Untuk C, edisi pertama Bahasa Pemrograman C (alias K&R) menunjukkan bahwa intuisi Anda tentang macro preprocessor benar:
Nama konstanta simbolis biasanya ditulis dalam huruf besar sehingga mudah dibedakan dari nama variabel huruf kecil.
Dalam banyak hal, ini adalah peninggalan dari bahasa assembly, di mana makro didefinisikan dalam huruf besar bersama dengan label, opcode, nama register dan yang lainnya. Munculnya perakitan AT&T mengubah hal itu pada beberapa platform, tapi saya pikir itu sangat dipengaruhi oleh fakta bahwa terminal yang mendukung huruf kecil menjadi sesuatu dan Unix adalah apa yang saya sebut "sistem operasi huruf kecil."
Pada dua poin lainnya, Anda memukul 0,500:
Enum
Pada saat edisi kedua diterbitkan, enum
telah didefinisikan, mereka disebut sebagai konstanta enumerasi dan dibahas dalam bagian konstanta. Karena konstanta yang didefinisikan oleh suatu enum
diwakili oleh simbol, yang membuatnya konstanta simbolik, yang, jika Anda akan mengikuti konvensi yang disarankan, harus dinamai dalam huruf besar. (Seperti macro preprocessor, tidak ada yang menghentikan Anda dari melakukan sebaliknya.)
Implikasinya di sini adalah bahwa tidak seperti beberapa bahasa yang mengikuti, C tidak memperlakukan enum
sebagai tipe kelas pertama di mana jenis itu sendiri berbeda, nilai enumerasi spesifik untuk setiap jenis dan dapat digunakan kembali pada yang lain. Alih-alih, ini secara efektif merupakan istilah praktis #define
yang menghasilkan urutan bilangan bulat dengan pengidentifikasi terlampir. Ini membuat
enum foo { BAR, BAZ };
enum quux { BLETCH, BAZ };
tidak valid karena semua simbol berbagi lingkup dan BAZ
didefinisikan ulang. (Ini merupakan peningkatan dari preprosesor yang, pada saat itu, tidak memperingatkan tentang satu #define
clobbering yang lain.) Selanjutnya, C tidak peduli apakah Anda mencampurnya karena mereka semua hanya bilangan bulat, membuat
enum foo { BAR, BAZ };
enum quux { BLETCH, BLRFL };
enum foo variable = BLETCH;
sepenuhnya valid bahkan pada kompiler modern dengan semua peringatan dihidupkan.
Const
NB: Kata const
kunci berasal pada tahun 1981 dengan C Dengan Kelas Stroustrup (yang berevolusi menjadi C ++) dan akhirnya diadopsi oleh C. Pilihan nama sangat disayangkan, karena bertabrakan dengan penggunaan K & R dari konstanta istilah untuk mengartikan apa yang sekarang kita sebut sebagai literal (misalnya 38
,, 'x'
atau "squabble"
). Teks dalam edisi kedua tidak ditulis ulang untuk mencerminkan hal itu.
Variabel yang dideklarasikan const
adalah cerita yang berbeda karena mereka masih variabel. Mereka tidak seharusnya dimodifikasi, tetapi apakah gagasan tentang variabel konstan lebih masuk akal daripada, katakanlah, udang jumbo adalah makanan untuk diskusi lain. Apa pun masalahnya, C tidak pernah benar-benar serius tentang hal itu karena standar hanya mensyaratkan bahwa kompiler memancarkan diagnostik ketika Anda mencoba mengubahnya. Perilaku aktual tidak terdefinisi jika modifikasi dikompilasi dan dieksekusi.
Menjadi variabel, masuk akal bahwa apa pun const
akan mengikuti konvensi diberi nama dalam huruf kecil. Menggunakannya untuk mewakili literal memang memiliki beberapa keunggulan keamanan jenis tetapi tidak membuat optimasi yang baik jika Anda harus mencapai antara unit kompilasi untuk mendapatkan nilai.
Yang bukan mereka adalah konstanta dalam arti K&R, dan untuk alasan itu pengidentifikasi mereka tidak boleh huruf besar. Beberapa orang menggunakannya seperti itu, tetapi ini bukan praktik yang saya rekomendasikan kecuali dalam beberapa kasus tertentu.
const
pengidentifikasi menjadi huruf kecil dan#defines
atas. Jawa meskipun mengadopsi huruf besar untuk konstanta dan bahasa lain diikuti, tapi aku bisa salah sedikit terakhir. Dibutuhkan lebih banyak penelitian! :)