Nie jest dla mnie jasne, kiedy używam dyrektyw kompilatora, który z poniższych dwóch fragmentów kodu jest poprawny/preferowany i dlaczego. Wygląda na to, że większość programistów i projektów Open Source, które widziałem, korzysta z pierwszej, ale widziałem drugą często używaną.#ifdef DEBUG kontra #if DEBUG
#ifdef DEBUG
[self doSomethingOnlyWhenDebugging];
#endif
VERSUS
#if DEBUG
[self doSomethingOnlyWhenDebugging];
#endif
Które z powyższych fragmentów kodu jest korzystne tylko podczas debugowania kodu i dlaczego działa? Domyślam się, że pierwsza uruchomi się, jeśli DEBUG zostanie zdefiniowane jako PRAWDA lub FAŁSZ, gdzie druga będzie działać tylko wtedy, gdy DEBUG jest zdefiniowany i ustawiony na PRAWDA. Czy to jest poprawne?
'' ifdef' po prostu sprawdza, czy symbol został zdefiniowany.'# if' testuje WARTOŚĆ symbolu. więc '#define FOO 0' sprawi, że' #ifdef FOO' będzie prawdziwe, ale '#if FOO' będzie fałszywe, ponieważ robi' #if 0'. –
Powinieneś spróbować znaleźć definicję "root" i określić, czy wartość ma być wartością 1/0, czy obecną/nieobecną. Złapanie ich może mieć "nieoczekiwane" konsekwencje. –