rmifdef 使用方法



【機能概要】
 c、c++言語のソースファイルからifdefセクションの削除を行います。
 また、単なるテキストファイルからifdefセクションの削除を行うこともできます。 この場合には、文字列認識('〜'や"〜")やコメント認識(/*〜*/)が行われません。
【実行形式】
    rmifdef [-nvT] [-l[A] list1] [-d list2] file

【パラメータ】
    -nvT:
      n     行番号を付加します。
      v     表示を逆にします(削除するものを表示します)。
      T     入力ファイルを単なるテキストデータとみなします。
 
    -l[A] list1
            list1で指定されたものについては、これが「真」となる箇所を出力します。
            正確には、この各識別子が定義済みであるとして各ifdef文を判定します。
            
            -lAを指定した場合、list1以外の無効なifdefを全て削除します。
 	    
            list1及びlist2は次の形式になります。
              string-1[,string-2...]

            string-nには次のものを指定します。
              ?   任意の1文字と一致
              *   任意の文字列と一致
              x   0-9,a-z,A-Z,'_'のいずれか 

    -d list2
            list2で指定されたものについては、これが「偽」となる箇所を出力します。
            正確には、この各識別子が未定義であるとして各ifdef文を判定します。

    file    対象ファイル名
   

【補足説明】 (1)制限事項  @ソースは、コンパイルOKになっている必要があります。  A#ifについては、次の形式のみ処理できます。   ・#if 0[//〜] … elseセクションが出力されます。   ・#if 1[//〜] … thenセクションが出力されます。   ・#if [!]defined(name)[|| [!]defined(name2) ...][//〜]   ・#if [!]defined(name)[&& [!]defined(name2) ...][//〜]           … "!defined"の場合には、判定が逆になります。 条件式は、"||"または"&&"の一方のみを使用したものが判定対象となります。 なお、nameが定義されているかどうかを判定しているわけでないため、 実際のコンパイル結果と異なることにもなります。   ・#if name[//〜] … これはnameが0以外の定数値であることを仮定しています。   もしこの定数値が0であると、コンパイル結果とは結果が逆になります。 B#elifについては、以下の構文に対してのみ対応しています。  #if 条件式1 セクション1 #elif 条件式2 セクション2 [#elif 条件式3 セクション3 ........] [#else セクションn] #endif 上記の各条件式は、Aの#ifの条件式と同じになります。 ただし、#elifは -l(-lAを除く)、-dオプション指定の場合には、エラーになります。  C"#"と"ifdef"等の間にスペースを入れたものは認識できますが、コメント(/*〜*/) を入れた   ものは認識できません。

(2)オプションを何も指定しない場合には、結果は以下のようになります。 #ifdef NAME statement1 //これは表示されません。 #else statement2 //これが表示されます。 #endif #ifndef NAME statement3 //これが表示されます。 #else statement4 //これは表示されません。 #endif #if 0 statement5 //これは表示されません。 #else statement6 //これが表示されます。 #endif #if 1 statement7 //これが表示されます。 #else statement8 //これは表示されません。 #endif (3)"-l NAME1"と指定した場合には、以下のようになります。 #ifdef NAME1 statement1 //これが表示されます。 #else statement2 //これは表示されません。 #endif #ifdef NAME2 //これは全て表示されます。 statement1 #else statement2 #endif #if 0 //これは全て表示されます。 statement5 #else statement6 #endif #if 1 //これは全て表示されます。 statement7 #else statement8 #endif (4)"-lA NAME1"と指定した場合には、以下のようになります。 #ifdef NAME1 statement1 //これが表示されます。 #else statement2 //これは表示されません。 #endif #ifdef NAME1 statement1 //これが表示されます。 #ifdef NAME2 statement2 //これは表示されません。 #else statement3 //これが表示されます。 #endif #else statement4 //これは表示されません。 #endif #if 0 statement1 //これは表示されません。 #else statement2 //これが表示されます。 #endif #if 1 statement1 //これが表示されます。 #else statement2 //これは表示されません。 #endif #define NAME1 0 //この場合も、結果は同じになります。 #if NAME1 statement1 //これが表示されます。 #else statement2 //これは表示されません。 #endif #undef NAME1 #if NAME1 statement1 //これが表示されます。 #else statement2 //これは表示されません。 #endif #if defined(NAME1) statement1 //これが表示されます。 #elif defined(NAME2) statement2 //これは表示されません。 #else statement3 //これは表示されません。 #endif #if !defined(NAME1) statement1 //これは表示されません。 #elif defined(NAME2) statement2 //これは表示されません。 #else statement3 //これが表示されます。 #endif #if !defined(NAME1) statement1 //これは表示されません。 #elif !defined(NAME2) statement2 //これが表示されます。 #else statement3 //これは表示されません。 #endif (5)"-lA NAME1,NAME2"と指定した場合には、以下のようになります。 #ifdef NAME1 statement1 //これが表示されます。 #else statement2 //これは表示されません。 #endif #ifdef NAME2 statement3 //これが表示されます。 #else statement4 //これは表示されません。 #endif #ifdef NAME1 statement5 //これが表示されます。 #else #ifdef NAME2 //これは全て表示されません。 statement6 #endif #endif #if defined(NAME1) statement7 //これが表示されます。 #else statement8 //これは表示されません。 #endif #if !defined(NAME1) statement9 //これは表示されません。 #if defined(NAME2) //これは全て表示されません。 statement10 #else statement11 #endif #else //NAME1 else #if defined(NAME2) statement12 //これが表示されます。 #else statement13 //これは表示されません。 #endif #endif (6)論理式の判定で、"-l NAME1"と指定した場合には、以下のようになります。 #if defined(NAME1) || defined(NAME2) statement1 //これが表示されます。 #else statement2 //これは表示されません。 #endif #if defined(NAME1) || !defined(NAME2) statement3 //これが表示されます。 #else statement4 //これは表示されません。 #endif #if !defined(NAME1) || defined(NAME2) //これは判定結果が不定となるため全て表示されます。 statement5 #else statement6 #endif #if !defined(NAME1) || !defined(NAME2) //これは全て表示されます。 statement7 #else statement8 #endif #if defined(NAME1) && defined(NAME2) //これは全て表示されます。 statement11 #else statement12 #endif #if defined(NAME1) && !defined(NAME2) //これは全て表示されます。 statement13 #else statement14 #endif #if !defined(NAME1) && defined(NAME2) statement15 //これは表示されません。 #else statement16 //これが表示されます。 #endif #if !defined(NAME1) && !defined(NAME2) statement17 //これは表示されません。 #else statement18 //これが表示されます。 #endif (7)"-d NAME1"と指定した場合には、以下のようになります。 #ifdef NAME1 statement1 //これは表示されません。 #else statement2 //これが表示されます。 #endif #ifdef NAME2 //これは全て表示されます。 statement3 #else statement4 #endif (8)論理式の判定で、"-d NAME1"と指定した場合には、以下のようになります。 #if defined(NAME1) || defined(NAME2) //これは全て表示されます。 statement1 #else statement2 #endif #if defined(NAME1) || !defined(NAME2) //これは全て表示されます。 statement3 #else statement4 #endif #if !defined(NAME1) || defined(NAME2) statement5 //これが表示されます。 #else statement6 //これは表示されません。 #endif #if !defined(NAME1) || !defined(NAME2) statement7 //これが表示されます。 #else statement8 //これは表示されません。 #endif #if defined(NAME1) && defined(NAME2) statement11 //これは表示されません。 #else statement12 //これが表示されます。 #endif #if defined(NAME1) && !defined(NAME2) statement13 //これは表示されません。 #else statement14 //これが表示されます。 #endif #if !defined(NAME1) && defined(NAME2) //これは全て表示されます。 statement15 #else statement16 #endif #if !defined(NAME1) && !defined(NAME2) //これは全て表示されます。 statement17 #else statement18 #endif (9)"-l NAME1 -d NAME*"と指定した場合には、NAME1は「真」となるものが表示され、それ以外の"NAME*"に該当するものは、「偽」となるものが表示されます。 (10)"-d NAME1 -l NAME*"と指定した場合には、NAME1は「偽」となるものが表示され、それ以外の"NAME*"に該当するものは、「真」となるものが表示されます。


ホームページへ