条件付きブロックを削除するための C プリプロセッサ
C プログラミングの領域では、定義されたブロックに基づいてデッド コードを削除する必要がよくあります。または未定義のマクロ。標準の C プリプロセッサは限定的な条件付きコンパイル機能を提供しますが、高度な要件には特殊なツールが必要です。この記事では、そのようなニーズを満たすことができる C プリプロセッサについて説明します。
コードベースに次のような条件付きブロックが含まれるシナリオを考えてみましょう。
#ifdef NAME1 #define ALBUQUERQUE "ambidextrous" #else #define PHANTASMAGORIA "ghostly" #endif
必要な機能を備えたプリプロセッサコマンドライン引数を受け入れて、「-DNAME1」や「-UNAME1」などの定義済みまたは未定義のマクロを指定します。 「-DNAME1」を指定してコマンドを実行すると、次の出力が生成されます:
#define ALBUQUERQUE "ambidextrous"
一方、「-UNAME1」を指定してコマンドを実行すると、次の出力が生成されます:
#define PHANTASMAGORIA "ghostly"
より複雑複数の条件や入れ子になったブロックを含むシナリオも正確に処理できます。次の例を考えてみましょう:
#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 */
'-DUSE_VOID -UPLATFORM1' を指定してコマンドを実行すると、次の出力が得られます:
#undef VOID typedef void VOID; typedef void * VOIDPTR;
最後に、ネストされた条件を含む例:
#ifndef DOUBLEPAD #if (defined NT) || (defined OLDUNIX) #define DOUBLEPAD 8 #else #define DOUBLEPAD 0 #endif /* NT */ #endif /* !DOUBLEPAD */
引数「-UOLDUNIX」を渡すと、プロデュース:
#ifndef DOUBLEPAD #if (defined NT) #define DOUBLEPAD 8 #else #define DOUBLEPAD 0 #endif /* NT */ #endif /* !DOUBLEPAD */
推奨ソリューション
元のスレッドで提供されている推奨事項に基づいて、sunifdef は堅牢で効果的なプレソリューションとして際立っています。 -定義済み/未定義マクロに基づいてデッドコードを削除できるプロセッサ。これは広範囲に使用され、大きな成功を収めており、何千もの不必要な条件付きブロックが削除されています。
以上がC プリプロセッサは、定義済み/未定義のマクロに基づいてデッド コードをどのように削除できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。