область действия директивы препроцессора c#
Я ищу, чтобы использовать:
#define
И
#if
Чтобы я мог моделировать потенциально отсутствующее оборудование во время модульных тестов. Каковы правила использования операторов #define
?
То есть какова его область по умолчанию? могу ли я изменить область действия директивы?
5 ответов:
Как сказал Крис, область действия #define-это просто файл. (Стоит отметить, что это не то же самое, что "класс" - если у вас есть частичный тип, он может состоять из двух файлов, один из которых имеет определенный символ, а другой-нет!
Можно также определить символ в масштабе всего проекта, но это делается с помощью свойств проекта или коммутатора компилятора, а не задается в исходном коде.
Из MSDN, его область действия-файл
Хотя не могли бы вы пройти по маршруту макетных объектов, ala Mock.Носороги ?
Да, как уже упоминал Крис, его область действия-это весь файл. Вы можете использовать определенное ключевое слово в любом месте файла.
То есть;
#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 ; }
Comments