Как работает #error на C/С++?
Я угадываю из #, что это всего лишь утилита для компиляции. Как его можно использовать в программах на C/С++?
Не нашел много об этом в Интернете. Любые ссылки были бы полезны.
Ответы
Ответ 1
Заставляет компилятор (или препроцессор) выводить сообщение об ошибке. В С++ он также делает блок перевода плохо сформированным (т.е. Он приводит к сбою компиляции).
Если у вас есть несколько макросов, которые можно определить, и вы хотите быть уверенными, что определены только определенные их комбинации, вы можете использовать #error
, чтобы вызвать компиляцию, если определена некорректная комбинация.
Это также может быть полезно, если вы хотите быть уверенным, что какой-то блок кода никогда не компилируется (по какой-либо причине).
Ответ 2
Полезно проверять параметры компилятора, а также проверять комбинации макросочетаний. Некоторые случайные примеры:
#if !defined(_DLL)
# error This code will only work properly when compiled with /MD
#endif
#if _WIN32_WINNT < 0x502
# error Sorry, Windows versions prior to XP SP2 are not supported
#endif
#if defined(_APPLE) && defined(_LINUX)
# error Conflicting operating system option selected, choose one.
#endif
Ответ 3
Вот ссылка на документацию препроцессора Gnu, объясняющую директивы #error
и #warning
: http://gcc.gnu.org/onlinedocs/cpp/Diagnostics.html p >
В частности:
Директива #error
вызывает препроцессор, чтобы сообщить о фатальной ошибке. Знаки, образующие остальную часть строка, следующая за #error
, используется как сообщение об ошибке.
См. также этот вопрос о переносимости этих директив.