Как работает #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, используется как сообщение об ошибке.

См. также этот вопрос о переносимости этих директив.