2008-11-17 13 views
7

szukam używać:C# Pre-processor dyrektywa zakres

#define 

i

#if 

aby umożliwić mi symulować potencjalnie nieobecnego sprzętu podczas testów jednostkowych. Jakie są zasady korzystania z instrukcji #define?

tj. Jaki jest jego domyślny zakres? czy mogę zmienić zakres dyrektywy?

Odpowiedz

12

Jak powiedział Chris, zakres #define jest po prostu plikiem. (Warto zauważyć, że to nie jest to samo, co "klasa" - jeśli masz typ częściowy, może on składać się z dwóch plików, z których jeden ma zdefiniowany symbol, a jeden z nich nie ma żadnego.

Ty może również zdefiniować symbol w całym projekcie, ale jest to robione z project properties lub , a nie określone w kodzie źródłowym

1

Chociaż nie mogła zejść trasę atrapa obiektu, ala Mock.Rhinos?

1

Tak, jak wspomniał Chris, jego zasięg jest całym plikiem.Możesz użyć zdefiniowanego słowa kluczowego w dowolnym miejscu plik

tzn.

#define something 
... some code ... 

oraz w dowolnej metodzie, ciele klasy lub przestrzeni nazw, można go użyć jak;

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

Zakres dyrektywy preprocesora rozpoczyna się, gdy jest analizowany ze źródła i trwa, dopóki nie zostanie określone inaczej. Jeśli chcesz ograniczyć zakres dyrektywy preprocesora, użyj deklaracji "undef", którą wyłącza, gdy skończysz.

#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 ; 
}