私は 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コンパイラの場合を知りたいです。