問題タブ [conditional-compilation]
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.
unit-testing - 条件付きコンパイルは単体テストの有効なモック/スタブ戦略ですか?
スタブに関する最近の質問では、多くの回答がスタブを実装するための C# インターフェイスまたはデリゲートを提案していましたが、1 つの回答は、条件付きコンパイルを使用して、運用コードで静的バインディングを保持することを提案していました。この回答は、読んだ時点で -2 に変更されたため、少なくとも 2 人がこれは間違った回答だと本当に思っていました。おそらく、DEBUG の誤用が原因であるか、より広範な検証の代わりに固定値を使用している可能性があります。しかし、私は不思議に思わずにはいられません:
条件付きコンパイルの使用は、単体テスト スタブを実装するための不適切な手法ですか? 時々?いつも?
ありがとう。
編集-追加: 実験として例を追加したいと思います:
との比較
これにより、「DateTime.Now」への発信依存関係を C# インターフェイス経由でスタブ化できます。ただし、静的で十分な動的ディスパッチ呼び出しを追加し、オブジェクトは製品バージョンでも大きくなり、Foo のコンストラクターに新しい失敗パスを追加しました (割り当てが失敗する可能性があります)。
私はここで何も心配していませんか?これまでのフィードバックに感謝します!
c++ - オペレーティング システムに特定のライブラリのみを含める
Mac、Linux、および Windows でコンパイルしたいアプリを作成する場合、さまざまなオペレーティング システムに含める必要があるさまざまなライブラリを管理する最善の方法は何ですか。たとえば、glut opengl ツールキットを使用するには、オペレーティング システムごとに異なるインクルードが必要です。
c - プリプロセッサディレクティブでOSをチェックするにはどうすればよいですか?
コードがコンパイルされるオペレーティングシステムに基づいて、さまざまなことを実行するためのコードが必要です。私はこのようなものを探しています:
これを行う方法はありますか?同じことをするより良い方法はありますか?
ios - iPhone用にコンパイルするときにXcodeによって設定される#defines
私はいくつかのセミポータブルコードを書いていて、iPhone用にコンパイルしているときに検出できるようにしたいと思っています。だから私はのようなものが欲しいです#ifdef IPHONE_SDK...
。
おそらくXcodeは何かを定義していますが、プロジェクトのプロパティの下には何も表示されません。Googleはあまり役に立ちません。
c# - .Net で、クライアント アセンブリのデバッグ ビルドからのみ一部のコードを呼び出すことは可能ですか?
メソッドの事前条件と事後条件をチェックするための (非常に小さな) フレームワークを作成しています。エントリ ポイントは次のとおりです (簡単にメソッドにすることができますが、それは問題ではありません)。
明らかに、事後条件のチェックはコストがかかる可能性があり、メソッドにバグがない場合は実際には必要ありません。したがって、次のように機能するメソッドが必要です。
whereConditionalCallingCodeAttribute
は、呼び出しコードが DEBUG シンボルを定義してコンパイルされている場合にのみ、このメソッドを実行する必要があることを意味します。これは可能ですか?
クライアントコードを次のようにしたい:
もちろん、WhileDebuggingThat を提供することはできません。次に、クライアント コードは次のようになります。
これは、他に何もうまくいかない場合のフォールバック プランですが、DRY がひどく壊れます。
私が理解しているように、でマークWhileDebuggingThat
すると、このライブラリを参照するアセンブリではなく[Conditional("DEBUG")]
、ライブラリのコンパイル中に DEBUG が定義されているかどうかに応じて、このメソッドが発行されます (または発行されません) 。したがって、これを行ってから、ライブラリのユーザーに、コードのデバッグ ビルドをライブラリのデバッグ ビルドにリンクし、リリース ビルドをリリース ビルドにリンクするように指示するドキュメントを作成できます。これは最善の解決策とは思えません。
最後に、ライブラリのユーザーに、プロジェクト内でこのクラスを定義するように指示できます。
私が見る限り、これも同様に機能するはずですが、DRY の原則を少しでも破る必要があります。
c# - C# のフレームワーク バージョンに応じた条件付きコンパイル
次のようなものを許可するプリプロセッサシンボルはありますか
またはこれを行う他の方法はありますか?
delphi - コンポーネントのプロパティに基づいてファイルを含める(リンクする)ことはできますか?
Delphi 2007/2009の奇妙な質問はここにあります:
設計時に定義されたコンポーネントプロパティに基づいて、ファイルをリンクに含めるか、ファイルを残すことができますか?
例:SomePropertyをtrueのままにすると、コンパイル時にユニットSomeUnitがプロジェクトに含まれます。それ以外の場合は含まれません。
この問題に対する私の2番目のアプローチは、2番目のコンポーネントをデプロイすることです。このコンポーネントは、フォームにドロップされると(またはドロップされない場合)、uses句にユニットが含まれます。しかし、それがプロパティで実行できるのであれば、それはより良いでしょう。
プロジェクトがビルドされるたびにコンポーネントが強制的にビルドされるため、IFDEFによる条件付きコンパイルは避けたいと思います。か否か?
プロジェクトにいくつかのユニットを含める簡単な方法を実現しようとしています。そうすれば、それらのユニットが特定のデータベースのサポートを提供します。これらをオプションに含めることは、接続コンポーネントで理想的には簡単です。サポートを確認すれば完了です。チェックを外し、コンパイルされたAPPでKBをいくつか減らします。
編集:たとえば、コンポーネントの方法を使用します。IFDEFの方法などは知っていましたが、プロジェクトをビルドするたびにコンポーネントをビルドする必要があります。か否か?
プロジェクトにいくつかのユニットを含める簡単な方法を実現しようとしていました。そうすれば、そのユニットが特定のデータベースのサポートを提供します。これらをオプションに含めることは、接続コンポーネントで理想的には簡単です。サポートを確認すれば完了です。チェックを外し、コンパイルされたAPPでKBをいくつか減らします。
c++ - #ifdefs と #define を使用して、必要に応じて関数呼び出しをコメントに変換します
このようなことをすることは可能ですか
SOMETHING が定義されている場合、foo(...) の呼び出しはコメント (または評価またはコンパイルされないもの) になり、それ以外の場合は MyFunction の呼び出しになります。
__noop が使用されているのを見たことがありますが、それを使用できるとは思いません。
編集:
MyFunction は可変数の引数を取るため、ここで実際にマクロを使用できるとは思いません。
また、引数が評価されないようにしたいと思います! (そのため、 MyFunction の本体をコメントアウトするようなことをしても、引数は引き続き評価されるため、実際には必要なものが得られません)
python - Python での条件付きコンパイル
Python で条件付きコンパイルを行うには?
DEF を使用していますか?
mfc - VC6 リソースを条件付きでコンパイルする方法
環境変数の形式で設定されるコンパイル スイッチ (値はCOMPILE_A
またはCOMPILE_B
) に応じて、アプリケーション名やスプラッシュ スクリーンなど、さまざまな設定でアプリケーションをコンパイルしたいと考えています。
私はこれまでに得ました:
「Project / Settings / C/C++ / Preprocessor Definitions」に追加しました
$(COMPILESWITCH)
(コマンドラインオプションの結果/D "$(COMPILESWITCH)"
)。stdafx.h では、次のコードを使用できます。これは、コマンド ライン パラメーターを介してプリプロセッサ定義を正しく定義したことを意味します。
しかし、「ResourceView / [右クリック] / Properties」の下の「Condition」プロパティに気付きました...ヘルプテキストには次のように書かれています:
調子リソースの組み込みを決定します。たとえば、条件が _DEBUG の場合、このリソースはデバッグ ビルドにのみ含まれます。
これはエレガントな方法のように見えますよね?
条件_DEBUG
として指定すると機能します。したがって、my should_DEBUG
を介して指定されているように、動作するはずですよね?
何らかの理由でそうではありません。なぜ?/D _DEBUG
$(COMPILESWITCH)
または、私が望むものを達成するための別のより良い方法がありますか?