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
854 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!

sumber:php.cn
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