5 Диагностика
Директива ‘#error’ заставляет препроцессор сообщить об ошибке. Токены, образующие остальную часть строки после ‘#error’, используются в качестве сообщения об ошибке.
Директиву ‘#error’ следует использовать внутри условного оператора, который определяет сочетание параметров, которые, как известно, программа не поддерживает должным образом. Например, если известно, что программа не будет работать должным образом на VAX, можно написать
#ifdef __vax__ #error "Won't work on VAXen. See comments at get_last_object." #endif
Если у вас несколько параметров конфигурации, которые должны быть настроены установкой согласованным образом, вы можете использовать условные операторы для определения несоответствия и сообщения об этом с помощью ‘#error’. Например,
#if !defined(FOO) && defined(BAR) #error "BAR requires FOO." #endif
Директива ‘#warning’ подобна ‘#error’, но заставляет препроцессор выдать предупреждение и продолжить предварительную обработку. Токены, следующие за ‘#warning’, используются в качестве сообщения о предупреждении.
Директиву ‘#warning’ можно использовать в устаревших заголовочных файлах, с сообщением, направленным пользователю к заголовочному файлу, который следует использовать вместо него.
Ни макрос ‘#error’, ни ‘#warning’ не выполняют макроподстановку своего аргумента. Внутренние последовательности пробелов заменяются одним пробелом. Строка должна состоять из полных токенов. Лучше всего сделать аргумент этих директив одной строковой константой; это позволит избежать проблем с апострофами и т. п.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-12.1.0/cpp/Diagnostics.html