2013-02-23 2 views

ответ

11
if (debug) 
    DoWork(); 
else 
    DoAnotherWork(); 

Приведенный выше код будет скомпилирован, и условие будет проверено во время выполнения.

#if 
    DoWork(); 
#else 
    DoAnotherWork(); 
#endif 

Эти утверждения будут проверяться во время компиляции.

Так что если условие #if истинно, DoWork(); будут скомпилированы и в противном случае DoAnotherWork(); будут скомпилированы. Где, как и в предыдущем примере, весь код, содержащий оператор if, будет скомпилирован.

Пожалуйста, прочитайте это на директивы препроцессора

Preprocessor Directives

+0

Вы также можете добавить ссылку на Логические директивы –

9

первого, Preprocessor Directive и вторым Logical statement.

+2

Несмотря на объем upvotes, это не самый лучший ответ. без ссылок, ваш ответ не объясняет смысла обоих понятий. Ваш ответ должен стоять отдельно для будущих ссылок. Пожалуйста, подумайте над тем, чтобы расширить свой ответ, чтобы ссылки дополняли ответ, а не только детали. – psubsee2003

+1

Я думаю, что он стоит совсем один. Это объяснение в предложении, и нет необходимости нажимать ссылки, чтобы понять это. – Fionnuala

6

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

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

Смежные вопросы