c # Область действия препроцессора - PullRequest
7 голосов
/ 17 ноября 2008

Я ищу использовать:

#define

и

#if

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

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

Ответы [ 5 ]

12 голосов
/ 17 ноября 2008

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

Вы также можете определить символ для всего проекта, но это делается с помощью свойств проекта или переключателя компилятора вместо указания в исходном коде.

3 голосов
/ 17 ноября 2008

С MSDN , его область действия - файл

1 голос
/ 17 ноября 2008

Да, как упоминал Крис, его область действия - весь файл. Вы можете использовать определенное ключевое слово в любом месте файла.

т.е.;

#define something
... some code ...

и в любом методе, теле класса или пространстве имен вы можете использовать его как;

#if something
  ... some conditional code ...
#else
  ... otherwise ...
#endif
1 голос
/ 17 ноября 2008

Хотя не могли бы вы не пройти по маршруту объектов Mock, ала Mock.Rhinos ?

0 голосов
/ 29 июля 2009

Область действия директивы препроцессора начинается, когда она анализируется из источника, и сохраняется до тех пор, пока не будет указано иное. Если вы хотите ограничить область действия директивы препроцессора, используйте объявление "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 ;
}
...