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





Из MSDN его областью является файл
Хотя не могли бы вы пойти по маршруту Mock объектов, аля Мок. Носороги?
Как сказал Крис, область действия #define - это просто файл. (Стоит отметить, что это не то же самое, что «класс» - если у вас есть частичный тип, он может состоять из двух файлов, в одном из которых определен символ, а в другом нет!
Вы также можете определить символ для всего проекта, но это делается с помощью свойства проекта или переключатель компилятора, а не указывается в исходном коде.
@ Goodies: Что вы имеете в виду, говоря «не работает»? Компилятору совершенно не важно, является ли это свойством модульного теста или нет. Конечно, в проекте модульного тестирования ничего не определено в производственном проекте.
Да, как сказал Крис, его объем - это весь файл. Вы можете использовать ключевое слово defined в любом месте файла.
т.е.
#define something
... some code ...
и в любом методе, теле класса или пространстве имен вы можете использовать это как;
#if something
... some conditional code ...
#else
... otherwise ...
#endif
Примечание VS2017: символ всего проекта (установленный в Project / Properties) кажется нет для работы с проектами модульных тестов. Очень неудобно.