質問

一部の主張は費用がかかるため、一部のように行って生産コードです。少なくとも明確ではないと主張すべきは常に有効になります。

アダプタのご使用をすればよいのでしょうかを見ることができたのでon/offの主張にしたりファイルまたはクラスです。

どうC++?

役に立ちましたか?

解決

非活性化のために、モジュール全体の私が使用したいをアサートします:

#if defined(assert)
#  undef assert
#  define assert(x) ((void)0)
#endif

...もちろんこれは、カスタムマクロを使用して大丈夫であれば簡略化することができます。

#if defined(_NO_ASSERTS)
#  define myAssert(x) ((void)0)
#else
#  define myAssert(x) assert(x)
#endif

クラス全体の非アクティブ化のために、私は、静的定数クラスのメンバーやカスタムマクロとの組み合わせで、クラス全体の列挙型を使用したいです

#define myAssert(x) do { if(_CLASS_ASSERT) { assert(x); } } while(0)

class AssertOff
{
  enum { _CLASS_ASSERT = 0 }
}

列挙型と静的定数boolsを持つすべての近代的なコンパイラはif(_CLASS_ASSERT) {}を離れて最適化する必要があります。

他のヒント

コードとの主張を考慮しいスタイルの符号といいます。

しのためにランタイム on/offできないたBooleanに変更します。例えば、コードで次の操作が可能です:

変数を定義しますことを示すのに使用する場合の主張されたかについてグローバル名前空間に(例えばのmain()関数と同じファイル).

bool  turnOnAssertions;

変数を定義して以下のようなものその他のファイルがしたいのon/offのご主張:

extern bool turnOnAssertions; 

で操作するturnOnAssertions変数のUI書

if(turnOnAssertions)
assert(…);

でon/offの一部で主張!

としてコンパイル時間 にするべきなの

まコンパイラするフラグのように–DASSERTIONSON(-Dflag_name[名フラグを設定できます。])

#ifdef ASSERTIONSON 
bool turnOnAssertions = true;
#else
bool turnOnAssertions = false;
#endif

での使用を可変となります。

幸運を祈っています。

を無効主張のためのC++ファイルを、次のいずれかの操作を行います:

  • を定義する NDEBUG 常にソースファイルです。
  • 追加の -DNDEBUG を編集するためのオプションのソースファイルです。

最Ideおよび/またはインフラの構築ができる指定オプションの構築はファイルです。

Offの主張りの基底クラスでは難しい複数のクラスが混入し、同じソースファイルで、多くのインライン機能を、ヘッダファイルです。もちろんの #define NDEBUG#undef NDEBUG に関連する。

一部のIdeダウンロード出来るように設定 NDEBUG 非debugビルドから伸びにより、選択の自分のマクロ名など DISABLE_ASSERT.そしてどのようにしているように共通のヘッダファイルなコンパイル済み):

 #ifdef DISABLE_ASSERT
 #define NDEBUG
 #endif
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top