これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド unifdefall です。
プログラム:
NAME
unifdef, ユニフデフォール — コードからプリプロセッサ条件を削除する
SYNOPSIS
unifdef [-bBcdehKkmnsStV] [-Ipath] [-[i]Dsym[=ヴァル]][-[i]Usym] ... [-f 汚す] [-x {012}]
[-M 後口] [-o アウトファイル] [ファイル内 ...]
ユニフデフォール [-Ipath] ... file
DESCRIPTION
この unifdef ユーティリティは条件を選択的に処理します cpp(1) 指令。 から削除します
ファイルでは、ディレクティブとそれらが指定する追加テキストの両方を削除する必要があります。
それ以外の場合は、ファイルをそのままにしておきます。
この unifdef ユーティリティは~に作用します #もし, #ifdef, #ifndef, #エリフ, #その他, #endif 線、使用
で指定されたマクロ -D と -U コマンドラインオプションまたは -f 定義ファイル。 指令
マクロ仕様が明確な値を提供するのに十分な場合に処理されます。
コントロール式。 結果が false の場合、ディレクティブとその下の次の行
コントロールが削除されます。 結果が true の場合、ディレクティブのみが削除されます。 アン #ifdef or
#ifndef 制御マクロが指定されていない場合、ディレクティブは変更されずに渡されます。
任意 #もし or #エリフ 不明な値またはその値を持つ制御式 unifdef 解析できません
は変更されずに通過します。 デフォルトでは、 unifdef 無視する #もし と #エリフ 定数を含む行
表現。 を指定することでそれらを処理するように指示できます。 -k コマンドラインのフラグ。
これは、一般的に使用される式構文のサブセットを理解します。 #もし と #エリフ 行:
整数定数、コマンドラインで定義されたマクロの整数値、 定義済みの()
オペレーター、オペレーター !, <, >, <=, >=, ==, !=, &&, ||、および括弧で囲まれた式。 あ
一種の「短絡」評価が使用されます。 && 演算子: いずれかのオペランドが
確実に false の場合、他のオペランドの値が次の場合でも、結果は false になります。
知らない。 同様に、どちらかのオペランドが || が確実に true であれば、結果も true になります。
式を評価するとき、 unifdef 最初にマクロを展開しません。 マクロの値
式ではなく単純な数値である必要があります。 限られた形式の間接指定が許可されます。
あるマクロの値は別のマクロの名前になります。
ほとんどの場合、 unifdef オブジェクトのようなマクロ (引数なし) を区別しません。
および関数のようなマクロ (引数付き)。 関数のようなマクロの呼び出しは、
#もし と #エリフ 制御式。 マクロが明示的に定義されていない場合、または定義されている場合
-D コマンドラインでフラグを指定するか、 #定義する -f 定義ファイル、その
引数は無視されます。 マクロがコマンドラインで明示的に定義されていない場合、 -U
フラグ、または #undef -f 定義ファイルには引数がない場合があります。
構文エラーが発生します。
この unifdef ユーティリティは、ディレクティブの XNUMX つがいつ使用されるかを知るために C について十分に理解しています。
コメント内にあるため、またはバックスラッシュの連続行の影響を受けているため非アクティブです。 それ
異常な形式のプリプロセッサ ディレクティブを検出し、レイアウトが奇妙すぎる場合を認識します。
それを扱うのです。
というスクリプト ユニフデフォール すべての条件を削除するために使用できます cpp(1) 本人からの指示
ファイル。 それは使用しています unifdef -s と cpp -dM すべての制御マクロとそのマクロのリストを取得するには
定義 (またはその欠如) を指定してから、 unifdef 処理する適切な引数を指定して
ファイル。
OPTIONS
-Dsym=ヴァル
マクロが特定の値に定義されていることを指定します。
-Dsym マクロが値 1 に定義されていることを指定します。
-Usym マクロが未定義であることを指定します。
同じマクロが複数の引数に出現する場合、最後に出現したマクロが優先されます。
-IDsym[=ヴァル]
-IUsym C の文字列、コメント、行の継続は、内部では無視されます。 #ifdef と #ifndef
これらのオプションで指定されたマクロによって制御されるブロック。
-f 汚す
ファイル 汚す 含まれています #定義する と #undef プリプロセッサ ディレクティブ。
対応するものと同じ効果 -D と -U コマンドライン引数。 あなたが持つことができます
の試合に -f 引数とそれらを混ぜ合わせます -D と -U 引数。 後のオプションは上書きされます
以前のもの。
各ディレクティブは XNUMX 行に記述する必要があります。 オブジェクトのようなマクロ定義 (なし)
引数) は指定された値に設定されます。 関数のようなマクロ定義 (
引数) は 1 に設定されているかのように扱われます。
-b 削除された行は削除せずに空行に置き換えます。 相互排他的
-B オプションを選択します。
-B 削除されたセクションの周囲の空行を圧縮します。 と相互に排他的です -b
オプションを選択します。
-c 補完、つまり、削除またはブランクになるはずの行は保持されます。
逆に。
-d デバッグ メッセージの印刷をオンにします。
-e デフォルトでは、 unifdef プリプロセッサを削除する必要がある場合はエラーが報告されます
複数行にわたるディレクティブ (複数行のコメントがある場合など)
右端からぶら下がっています。 の -e flag を使用すると、代わりにその行を無視します。
-h ヘルプを印刷します。
-Ipath に指定します ユニフデフォール 追加で探す場所 #include ファイル。 このオプション
によって無視されます unifdef との互換性のために cpp(1) 簡略化すると、
の実装 ユニフデフォール.
-K 常に次の結果を扱います && と || いずれかのオペランドが次の場合、演算子は不明として扱われます。
未知のオペランドが結果に影響を与えない場合に短絡する代わりに、不明なオペランドを使用します。
このオプションは、古いバージョンの unifdef.
-k プロセス #もし と #エリフ 定数式を含む行。 デフォルトでは、セクション
このような行によって制御される行は、通常は開始されるため、変更されずに通過します。
「#if 0」は、将来または過去の開発を概略するための一種のコメントとして使用されます。
通常のコメントと同様に、これらを削除するのは失礼です。
-m XNUMX つ以上の入力ファイルを適切に変更します。
-M 後口
入力ファイルを所定の位置に変更し、元のファイルのバックアップを保存します。
後口 入力ファイル名に。
-n #line ディレクティブを出力の削除された行の後に追加して、エラーが発生しないようにします。
出力ファイルのコンパイル時に生成されるファイルは、入力ファイルの行番号に対応します
ファイルにソフトウェアを指定する必要があります。
-o アウトファイル
出力をファイルに書き込む アウトファイル 処理時に標準出力の代わりに
単一のファイル。
-s このオプションを使用すると、入力ファイルを通常どおり処理する代わりに、 unifdef 生成する
式を制御するプリプロセッサ ディレクティブで使用されるマクロのリスト。
-S 以下のような -s オプションですが、各マクロのネストの深さも出力されます。 これは
相互依存関係の可能な組み合わせの数を計算するのに役立ちます。
定義済み/未定義マクロ。
-t C 文字列、コメント、行継続の解析を無効にします。これは便利です。
プレーンテキストの場合。 これはのブランケットバージョンです -ID と -IU フラグ。
-V バージョンの詳細を印刷します。
-x {012}
終了ステータス モードを XNUMX、XNUMX、または XNUMX に設定します。 を参照してください。 EXIT ステータス 以下のセクション
詳細。
この unifdef ユーティリティはから入力を受け取ります stdin ない場合 file 引数。 必ず使用してください
-m or -M 複数の入力ファイルがある場合のオプション。 標準入力または
「-」を付けて標準出力に出力します。
この unifdef ユーティリティは、 -Dsym のオプション 差分とします。
EXIT ステータス
通常の使用では、 unifdef ユーティリティの終了ステータスは、 -x
オプションを選択します。
終了モードがゼロ (デフォルト) の場合、 unifdef 出力が次の場合、ステータス 0 で終了します。
入力の正確なコピー、または出力が異なる場合はステータス 1 になります。
終了モードが XNUMX の場合、 unifdef 出力が変更されていない場合はステータス 1 で終了し、変更されていない場合はステータス 0 で終了します。
違います。
終了モードが XNUMX の場合、 unifdef どちらの場合もステータス XNUMX で終了します。
すべての終了モードで、 unifdef エラーがある場合はステータス 2 で終了します。
終了ステータスは 0 です。 -h or -V コマンドラインオプションが与えられます。
診断
ネストのレベルが多すぎます。
不適切 #エリフ, #その他 or #endif.
難読化されたプリプロセッサ制御ライン。
時期尚早な EOF (最後に終了していない行番号付き) #もし).
EOFはコメントにあります。
onworks.net サービスを使用してオンラインで unifdefall を使用する