問題タブ [c-preprocessor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
6760 参照

c# - 実行時に #define の値を設定する方法はありますか?

実行時に #define の値を設定する方法はあるのだろうか。

以下のコードには、Oracle 固有および Sql Server 固有のクエリがあると想定しています。

0 投票する
10 に答える
99440 参照

c++ - Visual Studio で前処理した後に C/C++ ソース ファイルを表示するにはどうすればよいですか?

多くのプリプロセッサ ディレクティブを含むソース ファイルがあるとします。プリプロセッサが処理された後の様子を確認することはできますか?

0 投票する
5 に答える
3337 参照

python - C++ プリプロセッサ #if ステートメントの解析

条件付きコンパイルを含む C/C++ ソース ファイルがあります。顧客に出荷する前に、ほとんどの #if ステートメントを削除して、顧客が正しい -D オプションをコンパイラに渡すことを心配する必要がないようにしたいと考えています。

これを実装して Python で動作させていますが、#ifdef および #ifndef ステートメントのみを適切に処理します。#if ステートメントのサポートを追加する必要がありますが、#if の構文ははるかに複雑です。(たとえば、&&、||、!、括弧、関係演算子、算術などを使用できます)。

#if ステートメントを解析して評価する既存のオープンソース コードはありますか? (できればPythonで)。

私が知っている唯一の実装は GCC ですが、これはこのタスクには複雑すぎます。

0 投票する
6 に答える
6356 参照

c++ - 特定のマクロ/プリプロセッサシンボルが宣言されたときに(GCCで)知る方法は?

さまざまなヘッダー ファイルに #define foo があるとします。それはいくつかの異なるものに展開する可能性があります。(.cc ファイルをコンパイルするときに) #define が発生したとき、それが展開される対象、それがどのファイルで、どこからインクルードされたかを知りたいです。

出来ますか?そうでない場合、役立つ可能性のある部分的な解決策はありますか?

明確化のリクエストでコメントを自由に追加してください。

編集: 現在の回答は、#define が 1 つある場合に集中しているようで、定義にジャンプするか、定義が何であるかを知りたいだけです。それは単純なケースであり、はい、あなたのソリューションは機能します。しかし、異なるファイルに同じ #define があり、どれが最初に実行されるかを知りたい場合、これらの手法はどれも役に立ちません。さて、私は実際に #warning を慎重に使用して適切な場所を見つけました。しかし、これには多くの作業が必要です。

0 投票する
5 に答える
4056 参照

c++ - C プリプロセッサが特定のマクロ置換を実行できないようにする

特定のマクロを置き換えないようにプリプロセッサに指示するにはどうすればよいですか?

具体的な問題は次のとおりです。 Windows ヘッダー ファイルは GetMessage マクロを定義します。

API を含む C++ ヘッダー ファイルには、GetMessage メソッドがあります。メソッドの名前を変更したくありません。しかし、Windows で API を使用する場合、windows.h をインクルードすると、GetMessage メソッド呼び出しが GetMessageA に置き換えられます。

0 投票する
4 に答える
4534 参照

c# - c# プリプロセッサ ディレクティブ スコープ

私は使用しようとしています:

単体テスト中に存在しない可能性のあるハードウェアをシミュレートできるようにします。#defineステートメントを使用するためのルールは何ですか?

つまり、そのデフォルトのスコープは何ですか? ディレクティブのスコープを変更できますか?

0 投票する
7 に答える
38184 参照

c - C プリプロセッサ マクロにプリプロセッサ ディレクティブを含めることはできますか?

私は次のことと同等のことをしたいと思います:

現在、#ifdefまたはネストされたプリプロセッサ ディレクティブは、関数マクロで確認できる限り許可されていません。何か案は?

更新:これは不可能のようです。実行時にチェックするためのハックでさえ、達成できないようです。だから私は次のようなもので行くと思います:

0 投票する
13 に答える
11059 参照

c++ - #include ヘッダー ガード形式?

プロジェクトにほとんど違いがないことはわかっていますが、C++ コードに #defined ヘッダー ガードを使用すると仮定すると、どの形式を使用しますか? たとえば、次のヘッダーがあるとしfoo.hppます。

大文字の #defines のアイデアには賛成ですが、これらのガードの形式を決めることはできません。

0 投票する
7 に答える
69769 参照

c - Cプリプロセッサでwhileループを書く方法は?

私は教育/ハッキングの観点からこの質問をしています (私は本当にこのようにコーディングしたくありません)。

Cプリプロセッサ ディレクティブのみを使用して while ループを実装することは可能ですか。マクロを再帰的に展開できないことは理解していますが、これはどのように行うのでしょうか?

0 投票する
11 に答える
25274 参照

c - Cでのマクロ定義(#define)の優れたプログラミング手法

たとえば、次のようなマクロは絶対に定義しないでください。

次のような操作を行うと、これは潜在的に危険な場合があります。

代わりに、マクロのユーザーがマクロをどのように使用するかわからないため、次のように定義します。

例は簡単ですが、それは私の質問をかなり説明しています。マクロを作成するときに推奨する一連のガイドラインまたはベストプラクティスはありますか?

御時間ありがとうございます!