Mam program, który musi być skompilowany tylko w trybie DEBUG. (cel testowania)Jak wygenerować błąd lub ostrzeżenie w preprocesorze C?
Jak mogę zapobiec kompilacji preprocesora w trybie RELEASE?
Mam program, który musi być skompilowany tylko w trybie DEBUG. (cel testowania)Jak wygenerować błąd lub ostrzeżenie w preprocesorze C?
Jak mogę zapobiec kompilacji preprocesora w trybie RELEASE?
miejsce wszędzie:
#ifndef DEBUG
#error Only Debug builds are supported
#endif
Jeśli po prostu chcesz zgłosić błąd:
#ifdef RELEASE
#error Release mode not allowed
#endif
będzie działać z większością kompilatorów.
Możesz użyć do tego dyrektywy error
. Poniższy kod wygeneruje błąd w czasie kompilacji, jeśli DEBUG
nie jest zdefiniowana:
#ifndef DEBUG
#error This is an error message
#endif
C dostarczenie #error
oświadczenie, a większość kompilatory dodać #warning
oświadczenie. The gcc documentation recommends, aby zacytować wiadomość.
@Antonio W porządku, nie ma tam [więcej] zalecenia. Zamieniłem link na jeden do dokumentu gcc. – philant
Może coś bardziej wyrafinowanego, ale jest to tylko kopia z poprzedniej wersji. :-)
#ifdef DEBUG
#pragma message ("Debug configuration - OK")
#elif RELEASE
#error "Release configuration - WRONG"
#else
#error "Unknown configuration - DEFINITELY WRONG"
#endif
P.S. Istnieje również jeden sposób generowania ostrzeżenia. Tworzenie bez numeru referencyjnego Labe jak
HereIsMyWarning:
i nie odwoływać. Podczas kompilacji dostaniesz ostrzeżenie jak
1>..\Example.c(71) : warning C4102: 'HereIsMyWarning' : unreferenced label
Dla GCC i Clang (i prawdopodobnie kompilatora, który obsługuje funkcję _Pragma) można zdefiniować makro:
#if ! DEBUG
#define FIX_FOR_RELEASE(statement) _Pragma ("GCC error \"Must be fixed for release version\"")
#else
#define FIX_FOR_RELEASE(statement) statement
#endif
Można użyć tego makra do czasowego hacki , na przykład, aby ominąć kod, którego nie napisał jeszcze współpracownik, aby upewnić się, że nie zapomnisz go naprawić, gdy chcesz udostępnić kompilację publicznie. Albo
FIX_FOR_RELEASE()
// Code that must be removed or fixed before you can release
lub
FIX_FOR_RELEASE(statement that must be removed or fixed before you can release);
w kodzie :: Blocks, jeśli nie chcesz tryb wydania, można usunąć w trybie uwolnienia. Aby to zrobić, kliknij menu Projekt, wybierz Właściwości ..., a na karcie Utwórz cele kliknij przycisk Zwolnij, a następnie kliknij przycisk Usuń. Usunięcie trybu Release dotyczy tylko bieżącego projektu, więc nadal można go używać w innych projektach.
W przeciwnym razie, jeśli naprawdę chcesz używać preprocesora, można to zrobić:
#ifdef RELEASE
#error "You have to use the Debug mode"
#endif
Przepraszam, wymieszać pragmy i błędów podczas pisania. Poprawione w odpowiedzi. –