c#プリプロセッサディレクティブスコープ
-
08-07-2019 - |
質問
使用したい:
#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 ;
}
所属していません StackOverflow