Spec-Zone.ru › GCC 11 CPP

Следующий: Else, Предыдущий: If, Вверх: Синтаксис условных выражений [Оглавление][Индекс]

4.2.3 Defined ¶

Специальный оператор defined используется в выражениях ‘#if’ и ‘#elif’ для проверки, определена ли определённая имя как макрос. defined name и defined (name) — это выражения, значение которых равно 1, если имя определено как макрос в текущей точке программы, и 0 в противном случае. Таким образом, #if defined MACRO точно эквивалентно #ifdef MACRO.

defined полезно, когда нужно проверить существование нескольких макросов одновременно. Например,

#if defined (__vax__) || defined (__ns16000__)

будет выполнено, если хотя бы одно из имён __vax__ или __ns16000__ определено как макрос.

Условные выражения такого вида:

#if defined BUFSIZE && BUFSIZE >= 1024

обычно можно упростить до просто #if BUFSIZE >= 1024, так как если BUFSIZE не определено, оно будет интерпретироваться как ноль.

Если оператор defined появляется в результате расширения макроса, стандарт C говорит, что поведение неопределено. GNU cpp обрабатывает его как настоящий оператор defined и вычисляет его нормально. Он будет выдавать предупреждение, когда ваш код использует эту функцию, если вы используете опцию командной строки -Wpedantic, так как другие компиляторы могут обрабатывать её по-другому. Предупреждение также включено опцией -Wextra, и его также можно включить индивидуально с помощью -Wexpansion-to-defined.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-11.4.0/cpp/Defined.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API