Как создать ошибку или предупреждение в препроцессоре C?

У меня есть программа, которая должна быть скомпилирована только в режиме DEBUG. (цель тестирования)

Как я могу препроцессор предотвратить компиляцию в режиме RELEASE?

Ответ 1

Место где угодно:

#ifndef DEBUG
#error Only Debug builds are supported
#endif

Ответ 2

C предоставляет оператор #error, и большинство компиляторов добавляют оператор #warning. Документация gcc рекомендует процитировать сообщение.

Ответ 3

Возможно, что-то более сложное, но это только копия и вставка предыдущих решений.: -)

#ifdef DEBUG        
    #pragma message ( "Debug configuration - OK" )
#elif RELEASE   
    #error "Release configuration - WRONG"
#else
    #error "Unknown configuration - DEFINITELY WRONG"
#endif

P.S. Существует также один способ создания предупреждения. Создать неопубликованный labe, например

HereIsMyWarning:

и не ссылайтесь на него. Во время компиляции вы получите предупреждение, например

 1>..\Example.c(71) : warning C4102: 'HereIsMyWarning' : unreferenced label

Ответ 4

Для этого вы можете использовать директиву error. Следующий код выдает ошибку во время компиляции, если DEBUG не определен:

#ifndef DEBUG
#error This is an error message
#endif

Ответ 5

Если вы просто хотите сообщить об ошибке:

#ifdef RELEASE
  #error Release mode not allowed
#endif

будет работать с большинством компиляторов.

Ответ 6

Для GCC и Clang (и, возможно, любого компилятора, который поддерживает функцию _Pragma) вы можете определить макрос:

#if ! DEBUG
#define FIX_FOR_RELEASE(statement) _Pragma ("GCC error \"Must be fixed for release version\"")
#else
#define FIX_FOR_RELEASE(statement) statement
#endif

Вы можете использовать этот макрос для временных хаков, например, чтобы обойти код, который еще не написал сотрудник, чтобы убедиться, что вы не забыли его исправить, как только вы хотите опубликовать сборку для публики, Либо

FIX_FOR_RELEASE()
// Code that must be removed or fixed before you can release

или

FIX_FOR_RELEASE(statement that must be removed or fixed before you can release);

Ответ 7

В Code:: Blocks, если вы не хотите режим Release, вы можете удалить режим Release. Для этого нажмите меню "Проект", выберите "Свойства...", а на вкладке "Построение целей" нажмите "Отпустить", а затем нажмите кнопку "Удалить". Удаление режима Release делает это только для текущего проекта, поэтому вы все равно можете использовать его в других проектах.

В противном случае, если вы действительно хотите использовать препроцессор, вы можете сделать это:

#ifdef RELEASE
#error "You have to use the Debug mode"
#endif