Подтвердить что ты не робот

Разница между препроцессорной директивой #if и нормалью if

В чем разница между директивой препроцессора #if и нормальным if в C? Я новичок в C.

4b9b3361

Ответ 1

Заявления С# перед ними называются препроцессорными директивами. Они обрабатываются парсером до того, как код действительно скомпилирован. Из первого поиска с помощью Google (http://www.cplusplus.com/doc/tutorial/preprocessor/):

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

Так что #if будет определено во время компиляции, "нормальное", если будет определено во время выполнения. Другими словами,

#define TEST 1
#if TEST
printf("%d", TEST);
#endif

Будет компилироваться как

printf("%d", 1);

Если вместо этого вы написали

#define TEST 1
if(TEST)
printf("%d", TEST);

Программа действительно будет компилироваться как

if(1)
printf("%d", 1);

Ответ 2

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

edit, вы имели в виду С++, потому что он был помечен как таковой? http://www.learncpp.com/cpp-tutorial/110-a-first-look-at-the-preprocessor/

Ответ 3

Препроцессор if обрабатывается препроцессором в качестве первого шага в компилируемой программе. Нормальный, если обрабатывается во время выполнения программы. Директива препроцессора используется для включения условной компиляции с использованием разных разделов кода в зависимости от разных определенных констант/выражений препроцессора. Нормальный, если используется для управления потоком в исполняемой программе.

Ответ 4

Директива препроцессора проверяет макросы или, другими словами, #define директивы и заменяет определение, если оно определено. Следовательно, проверяются только макропеременные. Это выполняется на этапе предварительной обработки.

Нормальный if или токен потока управления, если проверяет условие с переменными или возвращаемыми значениями функции. Эта проверка выполняется во время выполнения.