Rumah >pembangunan bahagian belakang >C++ >Bolehkah Kata Kunci C Ditakrifkan Semula Menggunakan #define Preprocessor?
Mentakrifkan Semula Kata Kunci dengan C Preprocessor #define
Perdebatan hangat mengelilingi kesahihan mentakrifkan semula kata kunci bahasa menggunakan #define dalam piawaian C sering mencetuskan kontroversi. Artikel ini bertujuan untuk menjelaskan isu perbalahan ini.
Menurut standard C (§17.4.3.1.1/2), makro prapemproses tidak boleh mentakrifkan semula nama yang diisytiharkan atau ditakrifkan dalam pengepala perpustakaan standard. Selain itu, ia melarang pentakrifan semula makro yang secara leksikal serupa dengan kata kunci C dalam unit terjemahan yang merangkumi pengepala standard.
Walau bagaimanapun, dalam C , peraturan telah mengalami perubahan yang ketara. Draf C 0x (FCD §17.6.3.3.1) secara jelas melarang definisi semula kata kunci menggunakan #define atau #undef. Langkah ini nampaknya sejajar dengan konsensus umum bahawa memanipulasi kata kunci dengan prapemproses boleh membawa kepada tingkah laku yang tidak dapat diramalkan dan kemungkinan pelanggaran piawaian.
Walau bagaimanapun, perlu diingat bahawa pernyataan "Unit terjemahan tidak boleh #define atau #undef nama leksikal serupa dengan kata kunci" telah disemak semula dalam piawaian akhir C 11. Perkataan baharu (ISO/IEC 14882:2011 §17.6.4.1/4) berbunyi: "Unit terjemahan tidak boleh mentakrifkan makro untuk nama yang serupa secara leksikal dengan kata kunci."
Semakan ini nampaknya mencadangkan larangan secara terang-terangan. pada mentakrifkan semula kata kunci dengan #define telah dialih keluar daripada standard. Walau bagaimanapun, larangan mentakrifkan semula nama yang diisytiharkan atau ditakrifkan dalam pengepala standard kekal dilaksanakan (ISO/IEC 14882:2011 §17.6.4.1/6).
Berdasarkan perbahasan yang berterusan ini, adalah dinasihatkan untuk berhati-hati apabila cuba mentakrifkan semula kata kunci bahasa dalam program C. Walaupun ia mungkin secara teknikal dalam keadaan tertentu, amalan sedemikian boleh menjejaskan keserasian program dengan pelbagai penyusun dan rantai alat. Mematuhi piawaian dan menggunakan mekanisme alternatif, seperti makro prapemproses atau jenis yang ditentukan pengguna, secara amnya dianggap sebagai pendekatan yang lebih selamat.
Atas ialah kandungan terperinci Bolehkah Kata Kunci C Ditakrifkan Semula Menggunakan #define Preprocessor?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!