Wykrywanie debug, release dla assert

0

Witam.
Czy jest możliwość podczas kompilacji wykrywanie czy kompilator pracuje w trybie debug czy release?
Chciałbym takie wykrywanie wykorzystać przy makrach assert. Podczas kompilacji debug assert będą włączone,
a przy release będą wyłączone i ignorowane przez kompilator.

Pozdrawiam :)

edit:: 5min później

Problem rozwiązany :)

#if NDEBUG
	//kod wykonywany dla release
#else
	//kod wykonywany dla debug
#endif
0
#ifdef _DEBUG
//kod dla debug
#else
//kod dla nie debug
#endif

Zamiast w kazdym miejscu dopisywac to 5 linijek, radzę zdefiniować na początku makro, ktore dla _DEBUG będzie robiło to co ma robić, a w else będzie puste

#ifdef _DEBUG
#define DEBUG_PRINT(x) printf(x);
#else
#define DEBUG_PRINT(x)
#endif

Źródło: http://stackoverflow.com/questions/2508729/how-to-separate-debug-and-release-mode-code
Dokładna nazwa makra o ile się nie mylę może zależeć od kompilatora.

EDIT:
Jak to możliwe że ja nie zauważyłem Twojego edita? :P

0

przykłado bodajże tego o czym wspomina @Zellus
http://ideone.com/3quzWp

0

Wielkie dzięki, sprawdzę działanie.
A takie jeszcze jedno pytanie, potrzebuje zrobić sprawdzanie błędów podczas kompilacji.
Czy da się zatrzymać kompilator (np. #error) wykrywając wartość zmiennej która będzie przypisywana podczas kompilacji ?

1

Różne warunki znane podczas kompilacji możesz sprawdzać za pomocą static_assert.

static_assert(x == 1, "x doesn't equal 1");

error: static assertion failed: x doesn't equal 1

http://ideone.com/qBJS65

0

static_assert() wywala mi błąd przy używaniu w funkcjach typu static.
Niestety nie mogę podać dokładnie błędu bo jadę na święta do domu.

Pozdrawiam i Wesołych Świat :)

0

Error otrzymuje w każdej funkcji jaką chce sprawdzać:

error: non-constant condition for static assertion
error: 'zmienna' is not a constant expression

Nie można stosować przy zmiennych ??

Pozdrawiam i czekam na odpowiedź.

1 użytkowników online, w tym zalogowanych: 0, gości: 1