2017-02-14 16 views
-1

В этих двух препроцессорных кодах, какова их различие и как они используются?Разница между директивами препроцессора #error и #warning

#error "¡ERROR GRAVISIMO!" 

#warning "ABC está obsoleto. Use XYZ en su lugar." 
+2

Это не макросы. И только одна из директив - стандартная C. Подсказка: она не вторая. – Olaf

+6

Почему вы не читаете документацию со своего компилятора? [gcc] (https://gcc.gnu.org/onlinedocs/cpp/Diagnostics.html), например, говорит: «Директива« #error »заставляет препроцессор сообщать о фатальной ошибке ... Директива« #warning » как «#error», но заставляет препроцессор выдавать предупреждение и продолжать предварительную обработку ». – kaylum

+2

Возможно, вы забыли, что есть поисковая система с именем [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) –

ответ

0

#error используется для создания ошибок, которые держат программу от компиляции. #warning создает предупреждение компилятора, но не позволяет компиляции программы. Вот две картинки, которые иллюстрируют, что:

Ошибка:

enter image description here

Предупреждение:

enter image description here

Обратите внимание, что в первом случае сборки не удалось, и во втором случае сборки успешно завершена.

#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.