4 Условные операторы
Условный оператор — это директива, которая инструктирует препроцессор выбрать, включать или нет фрагмент кода в окончательный поток токенов, передаваемый компилятору. Условные операторы препроцессора могут проверять арифметические выражения или то, определена ли переменная как макрос, или оба одновременно с использованием специального оператора defined.
Условный оператор в препроцессоре C в некотором смысле похож на оператор if в C, но важно понимать разницу между ними. Условие в операторе if проверяется во время выполнения вашей программы. Его цель — позволить вашей программе вести себя по-разному от запуска к запуску в зависимости от данных, с которыми она работает. Условие в директиве условного препроцессора проверяется при компиляции вашей программы. Его цель — позволить включать в программу разные части кода в зависимости от ситуации на момент компиляции.
Однако это различие становится менее ясным. Современные компиляторы часто проверяют операторы if при компиляции программы, если известно, что их условия не меняются во время выполнения, и исключают код, который никогда не будет выполнен. Если вы можете рассчитывать на то, что ваш компилятор это сделает, вы можете обнаружить, что ваша программа более удобочитаема, если вы используете операторы if с постоянными условиями (возможно, определяемыми макросами). Конечно, вы можете использовать это только для исключения кода, а не для типов или других директив препроцессора, и вы можете сделать это только в том случае, если код остается синтаксически правильным, когда он не используется.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-13.3.0/cpp/Conditionals.html