2008-11-17 179 views
7

我期待使用方法:C#預處理器指令範圍

#define 

#if 

,讓我在單元測試中模擬可能缺席硬件。什麼是使用#define陳述的規則?

即它的默認範圍是什麼?我可以更改指令的範圍嗎?

回答

12

正如Chris所說,#define的範圍只是文件。 (值得注意的是,這與「班級」不一樣 - 如果您有部分類型,它可能由兩個文件組成,其中一個文件定義了符號,其中一個沒有!

您也可以定義一個符號項目範圍,但與project propertiescompiler switch完成,而不是在源代碼中被指定。

3

MSDN,其範圍是文件

1

雖然你能不能下去Mock對象的路線,阿拉Mock.Rhinos

1

是克里斯提到,它的範圍是整個文件,你可以在使用已定義的關鍵字的任何地方文件

即;

#define something 
... some code ... 

在任何方法,類體或命名空間中,都可以使用它;

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

一個預處理指令的範圍時,它從源頭解析並一直持續到另有指示,否則啓動。如果您想限制預處理器指令的範圍,請使用它在完成時關閉的「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 ; 
}