Prapemprosesan dengan Penilaian Makro Bersyarat
Dalam domain pengaturcaraan C, prapemproses memainkan peranan penting dalam penyusunan bersyarat. Walau bagaimanapun, prapemproses standard tidak mempunyai keupayaan untuk menghapuskan kod mati berdasarkan makro yang ditakrifkan atau tidak ditentukan. Untuk fungsi ini, prapemproses khusus telah muncul.
Salah satu prapemproses sedemikian ialah unifdef, yang tidak melihat kemas kini sejak tahun 2000. Penggantinya, sunifdef, ialah alternatif yang mantap. Prapemproses ini menerima hujah baris perintah untuk menentukan makro seperti yang ditakrifkan atau tidak ditentukan (masing-masing -D dan -U), dan seterusnya menghapuskan kod yang tidak diperlukan.
Sebagai contoh, coretan kod berikut:
#ifdef NAME1 #define ALBUQUERQUE "ambidextrous" #else #define PHANTASMAGORIA "ghostly" #endif
Akan mengeluarkan:
Contoh yang lebih kompleks juga dikendalikan dengan berkesan oleh sunifdef. Pertimbangkan kod berikut:
#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 */
Dengan -DUSE_VOID -UPLATFORM1, sunifdef akan mengeluarkan:
#undef VOID typedef void VOID; typedef void * VOIDPTR;
Keupayaan Sunifdef meluas kepada senario kompilasi bersyarat yang lebih rumit, seperti:
#ifndef DOUBLEPAD #if (defined NT) || (defined OLDUNIX) #define DOUBLEPAD 8 #else #define DOUBLEPAD 0 #endif /* NT */ #endif /* !DOUBLEPAD */
Apabila dijalankan dengan -UOLDUNIX, output ialah:
#ifndef DOUBLEPAD #if (defined NT) #define DOUBLEPAD 8 #else #define DOUBLEPAD 0 #endif /* NT */ #endif /* !DOUBLEPAD */
Prapemproses ini tidak ternilai untuk mengurus pangkalan kod lama yang besar dengan kompilasi bersyarat yang meluas. Dengan mengautomasikan penghapusan kod mati, ia meningkatkan kebolehselenggaraan kod, mengurangkan ralat dan mempercepatkan pembangunan.
Atas ialah kandungan terperinci Bagaimanakah Sunifdef Boleh Meningkatkan Kompilasi Bersyarat dalam C dengan Mengalih Keluar Kod Mati?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!