У меня есть программа, которая должна быть скомпилирована только в режиме DEBUG. (цель тестирования)
Как я могу препроцессор предотвратить компиляцию в режиме RELEASE?
У меня есть программа, которая должна быть скомпилирована только в режиме DEBUG. (цель тестирования)
Как я могу препроцессор предотвратить компиляцию в режиме RELEASE?
Место где угодно:
#ifndef DEBUG
#error Only Debug builds are supported
#endif
C предоставляет оператор #error
, и большинство компиляторов добавляют оператор #warning
. Документация gcc рекомендует процитировать сообщение.
Возможно, что-то более сложное, но это только копия и вставка предыдущих решений.: -)
#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
Для этого вы можете использовать директиву error
. Следующий код выдает ошибку во время компиляции, если DEBUG
не определен:
#ifndef DEBUG
#error This is an error message
#endif
Если вы просто хотите сообщить об ошибке:
#ifdef RELEASE
#error Release mode not allowed
#endif
будет работать с большинством компиляторов.
Для 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);
В Code:: Blocks, если вы не хотите режим Release, вы можете удалить режим Release. Для этого нажмите меню "Проект", выберите "Свойства...", а на вкладке "Построение целей" нажмите "Отпустить", а затем нажмите кнопку "Удалить". Удаление режима Release делает это только для текущего проекта, поэтому вы все равно можете использовать его в других проектах.
В противном случае, если вы действительно хотите использовать препроцессор, вы можете сделать это:
#ifdef RELEASE
#error "You have to use the Debug mode"
#endif