質問

使用したい:

#define

and

#if

ユニットテスト中に潜在的に存在しないハードウェアをシミュレートできるようにします。 #define ステートメントを使用するためのルールは何ですか?

i.e。デフォルトのスコープは何ですか?ディレクティブのスコープを変更できますか?

役に立ちましたか?

解決

Chrisが言ったように、#defineの範囲は単なるファイルです。 (これは「クラス」と同じではないことに注意する価値があります-部分的なタイプがある場合、2つのファイルで構成されている可能性があります。1つはシンボルが定義され、もう1つは定義されていません!

シンボルをプロジェクト全体で定義することもできますが、これはプロジェクトプロパティで行います。ソースコードで指定されるのではなく、またはコンパイラスイッチ

他のヒント

MSDN から、その範囲はファイル

モックオブジェクトのルートをたどることはできませんが、ala Mock.Rhinos

はい、クリスが言ったように、その範囲はファイル全体です。定義済みのキーワードは、ファイル内のどこでも使用できます。

i.e;

#define something
... some code ...

任意のメソッド、クラス本体または名前空間で、次のように使用できます;

#if something
  ... some conditional code ...
#else
  ... otherwise ...
#endif

プリプロセッサディレクティブのスコープは、ソースから解析されたときに開始され、別の方法で指示されるまで持続します。プリプロセッサディレクティブのスコープを制限する場合は、" undef"を使用します。終了したらスイッチをオフにします。

#include <iostream>
using namespace std ;
int main()
{
  #define someString "this is a string"
  cout<<someString<<endl;
  #undef someString  // scope of someString ends here
  cout<<someString<<endl; //this causes a compile error
  return 0 ;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top