Bolehkah Prapemproses C Menghapuskan Sekatan #ifdef yang Tidak Diperlukan?
Kompilasi bersyarat dengan #ifdef adalah penting untuk memasukkan kod hanya apabila makro tertentu ditakrifkan atau tidak ditentukan. Walau bagaimanapun, dari masa ke masa, makro boleh menjadi lapuk atau tidak digunakan, meninggalkan kod mati.
Untuk menangani isu ini, pembangun telah mencari variasi prapemproses yang boleh menganalisis definisi makro (-D) yang ditentukan pengguna dan tidak ditentukan (- U) dan seterusnya menghapuskan #ifdef yang tidak perlu blok.
Contoh:
Pertimbangkan kod berikut:
#ifdef NAME1 #define ALBUQUERQUE "ambidextrous" #else #define PHANTASMAGORIA "ghostly" #endif
Jika prapemproses dijalankan dengan '-DNAME1', ia harus mengeluarkan output :
#define ALBUQUERQUE "ambidextrous"
Dengan '-UNAME1', ia sepatutnya jana:
#define PHANTASMAGORIA "ghostly"
Alat Cadangan:
Alat yang dicadangkan, dikenali sebagai unifdef dan penggantinya sunifdef, memenuhi keperluan ini. Ia menganalisis kod input bersama-sama dengan definisi dan penyingkiran makro yang dibekalkan pengguna.
Contoh 1:
#ifdef USE_VOID #ifdef PLATFORM1 #define VOID void #else #undef VOID typedef void VOID; #endif /* PLATFORM1 */ typedef void * VOIDPTR; #else typedef mint VOID; typedef char * VOIDPTR; #endif /* USE_VOID */
Output dengan -DUSE_VOID -UPLATFORM1:
#undef VOID typedef void VOID; typedef void * VOIDPTR;
Contoh 2:
#ifndef DOUBLEPAD #if (defined NT) || (defined OLDUNIX) #define DOUBLEPAD 8 #else #define DOUBLEPAD 0 #endif /* NT */ #endif /* !DOUBLEPAD */
Output dengan -UOLDUNIX:
#ifndef DOUBLEPAD #if (defined NT) #define DOUBLEPAD 8 #else #define DOUBLEPAD 0 #endif /* NT */ #endif /* !DOUBLEPAD */
Faedah:
Menggunakan unifdef atau sunifdef menawarkan beberapa faedah, termasuk:
Seperti yang ditunjukkan oleh contoh, alat ini boleh mengendalikan keadaan yang kompleks dan bersarang #ifdef blok dengan berkesan. Ia ialah alat yang berkuasa untuk mengurus pangkalan kod yang besar dan berkembang.
Atas ialah kandungan terperinci Bolehkah Prapemproses Mengeluarkan Sekatan `#ifdef` Berlebihan dalam Kod C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!