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-4.9.4/cpp/Diagnostics.html