область действия директивы препроцессора c#



Я ищу, чтобы использовать:



#define


И



#if


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



То есть какова его область по умолчанию? могу ли я изменить область действия директивы?

434   5  

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

    Ничего не найдено.