2

私は C/C++ のバックグラウンドを持っています。私は通常、自分のコードに重いアサーションを置きますが、C または C++ では、アサーション パラメーターである部分式の評価を排除する保証された方法はありません。そのため、マクロを使用する必要がありました。

C# では、そのレベルのマクロ サポートはありません。しかし、私にはConditional属性があります。私の C および C++ での経験では、副作用のために部分式を削除することはできません。

例えば、

[Conditional(DEBUG)]
void func1(int a)
{
    //  Do something.
}
int func2()
{
    //  Will this be called?
}

func1(func2());

func2がまだ呼び出されている場合は、 のようにコーディングする必要がありますisDebugMode() && func1(func2())。しかし、これは私が本当に避けたいことです。Conditionalしたがって、属性が部分式の削除を保証するかどうかを知りたいです。

そうでない場合、リリース ビルドで完全に削除されるデバッグ ビルド アサーションを記述するベスト プラクティスは何ですか?

私の知る限り、これはコンパイラ固有のサポートです。Monoコンパイラの場合を知りたいです。

4

4 に答える 4

0

c# にもマクロがありますが、c++ とは異なります。

でマクロを宣言して、Conditional Compilation Symbolsそのようにチェックできます

#if MACRO
#endif

ここでは、それらに関するドキュメントを読むことができます。

それが役に立てば幸い。

于 2013-07-31T09:26:22.900 に答える