В этих двух препроцессорных кодах, какова их различие и как они используются?Разница между директивами препроцессора #error и #warning
#error "¡ERROR GRAVISIMO!"
#warning "ABC está obsoleto. Use XYZ en su lugar."
В этих двух препроцессорных кодах, какова их различие и как они используются?Разница между директивами препроцессора #error и #warning
#error "¡ERROR GRAVISIMO!"
#warning "ABC está obsoleto. Use XYZ en su lugar."
#error
используется для создания ошибок, которые держат программу от компиляции. #warning
создает предупреждение компилятора, но не позволяет компиляции программы. Вот две картинки, которые иллюстрируют, что:
Ошибка:
Предупреждение:
Обратите внимание, что в первом случае сборки не удалось, и во втором случае сборки успешно завершена.
#error
используется, когда вы хотите сохранить программу при компиляции в определенных условиях, как правило, потому что программа не будет работать должным образом, то и #warning
используется, если программа должна быть в состоянии собрать, но не может работать должным образом, и вам хотите помочь пользователю узнать почему.
Следующие примеры приводят к ошибке или предупреждению, если программа скомпилирована в режиме C++ вместо режима C. Обратите внимание, что компиляторы C++ автоматически создают макрос __cplusplus
.
Ошибка:
#ifdef __cplusplus
#error This program isn't compatible with C++!
#endif
Предупреждение:
#ifdef __cplusplus
#warning You are compiling this as a C++ program, but it's recommended to compile it as a C program.
#endif
Первый код используется для программ, которые не поддерживают C++ и второй код используется для программ, которые могут иметь странное поведение C++, но которые все еще поддерживают его. Это, конечно, просто примеры использования #error
и #warning
.
Это не макросы. И только одна из директив - стандартная C. Подсказка: она не вторая. – Olaf
Почему вы не читаете документацию со своего компилятора? [gcc] (https://gcc.gnu.org/onlinedocs/cpp/Diagnostics.html), например, говорит: «Директива« #error »заставляет препроцессор сообщать о фатальной ошибке ... Директива« #warning » как «#error», но заставляет препроцессор выдавать предупреждение и продолжать предварительную обработку ». – kaylum
Возможно, вы забыли, что есть поисковая система с именем [google] (https://www.google.com). ** Сделайте некоторые усилия ** и прочитайте [стандарт] (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf) и [GNU CPP] (https: // gcc.gnu.org/onlinedocs/cpp.pdf) –