Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Pra-pemproses C Boleh Menghapuskan Kod Mati Berdasarkan Makro Ditakrifkan/Tidak Ditakrifkan?

Bagaimanakah Pra-pemproses C Boleh Menghapuskan Kod Mati Berdasarkan Makro Ditakrifkan/Tidak Ditakrifkan?

Patricia Arquette
Lepaskan: 2024-12-06 10:52:12
asal
921 orang telah melayarinya

How Can a C Pre-processor Eliminate Dead Code Based on Defined/Undefined Macros?

C Pra-pemproses untuk Menghapuskan Blok Bersyarat

Dalam bidang pengaturcaraan C, keperluan sering timbul untuk menghapuskan kod mati berdasarkan yang ditetapkan atau makro yang tidak ditentukan. Walaupun prapemproses C standard menyediakan keupayaan kompilasi bersyarat terhad, keperluan lanjutan memerlukan alat khusus. Artikel ini meneroka pra-pemproses C yang mampu memenuhi keperluan sedemikian.

Pertimbangkan senario di mana pangkalan kod mengandungi blok bersyarat seperti:

#ifdef NAME1
#define ALBUQUERQUE "ambidextrous"
#else
#define PHANTASMAGORIA "ghostly"
#endif
Salin selepas log masuk

Pra-pemproses dengan fungsi yang diingini akan menerima argumen baris perintah untuk menentukan makro yang ditakrifkan atau tidak ditakrifkan, seperti '-DNAME1' atau '-UNAME1'. Menjalankan arahan dengan '-DNAME1' akan menghasilkan output berikut:

#define ALBUQUERQUE "ambidextrous"
Salin selepas log masuk

Sebaliknya, melaksanakan arahan dengan '-UNAME1' akan menghasilkan:

#define PHANTASMAGORIA "ghostly"
Salin selepas log masuk

Lebih kompleks senario dengan pelbagai keadaan dan blok bersarang juga boleh dikendalikan dengan tepat. Pertimbangkan contoh 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 */
Salin selepas log masuk

Menjalankan arahan dengan '-DUSE_VOID -UPLATFORM1' akan menghasilkan output berikut:

#undef VOID
typedef void    VOID;
typedef void *  VOIDPTR;
Salin selepas log masuk

Akhir sekali, contoh yang melibatkan keadaan bersarang:

#ifndef DOUBLEPAD
#if (defined NT) || (defined OLDUNIX)
#define DOUBLEPAD 8
#else
#define DOUBLEPAD 0
#endif /* NT */
#endif /* !DOUBLEPAD */
Salin selepas log masuk

Meluluskan hujah '-UOLDUNIX' akan menghasilkan:

#ifndef DOUBLEPAD
#if (defined NT)
#define DOUBLEPAD 8
#else
#define DOUBLEPAD 0
#endif /* NT */
#endif /* !DOUBLEPAD */
Salin selepas log masuk

Penyelesaian Disyorkan

Berdasarkan cadangan yang disediakan dalam utas asal, sunifdef menonjol sebagai pra yang teguh dan berkesan -pemproses mampu menghapuskan kod mati berdasarkan makro yang ditakrifkan/tidak ditentukan. Ia telah digunakan secara meluas dengan kejayaan besar, menghapuskan beribu-ribu blok bersyarat yang tidak diperlukan.

Atas ialah kandungan terperinci Bagaimanakah Pra-pemproses C Boleh Menghapuskan Kod Mati Berdasarkan Makro Ditakrifkan/Tidak Ditakrifkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan