2008-11-17 6 views
7

Я ищу использовать:C# препроцессора директива сфера

#define 

и

#if 

, чтобы позволить мне моделировать потенциально отсутствующее оборудование во время модульных тестов. Каковы правила использования заявлений #define?

i.e. Каков его объем по умолчанию? могу ли я изменить сферу действия этой директивы?

ответ

12

Как сказал Крис, область действия #define - это только файл. (Стоит отметить, что это не то же самое, что «класс» - если у вас есть частичный тип, он может состоять из двух файлов, один из которых имеет определенный символ, а один из которых не имеет значения!

Вы можно также определить символ проекта в масштабах, но это сделано с project properties или compiler switch, а не указаны в исходном коде.

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 ; 
} 
Смежные вопросы