В чем разница между директивой препроцессора #if
и нормальным if
в C? Я новичок в C.
Разница между препроцессорной директивой #if и нормалью if
Ответ 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 или токен потока управления, если проверяет условие с переменными или возвращаемыми значениями функции. Эта проверка выполняется во время выполнения.