2012-03-26 2 views
1

Ich habe glücklich einen Ersatz für NSLog namens DLog verwendet, so dass ich mich nicht darum kümmern muss, dass das Debugging in einem Release-Build bleibt.Obj-C, unter Verwendung von ifndef und target-Parameter, um nur Debug-Zeilen zu drucken?

#ifndef NDEBUG 
# define DLog(FORMAT, ...) printf("%s\n", 
     [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]); 

#else 
# define DLog(...) 
#endif 

Aber ich möchte etwas ein wenig komplizierter machen, habe ich zahlreiche Ziele mit Debug-Parameter und ich möchte zwei Parameter enthalten, damit ich Debug-Informationen zu erhalten.

Ich hatte gehofft, ich könnte so etwas wie dieses ...

#ifndef NDEBUG 
# define DLog(FORMAT, ...) printf("%s\n", ... 
#else 
#ifdef TESTFLIGHT && FREEMIUM 
# define DLog(FORMAT, ...) printf("%s\n", ... 
#else 
# define DLog(...) 
#endif 

Aber es so, dass nicht so einfach .. Ich bin fehlt wahrscheinlich etwas offensichtlich?

Ich habe das Problem gegoogled aber kann nicht den AND-Operator für diesen Zweck finden und verschachtelte IF-Anweisungen scheint auch ein Problem?

Antwort

0

Sie sollten "#elif" verwenden, um ein anderes zu machen, wenn anstelle von verschachtelten ifs.

Und Sie können die #if definiert (TESTFLIGHT) & & definiert (FREEMIUM), wie auf den anderen Antworten gesagt. Also:

#ifndef NDEBUG 
# define DLog(FORMAT, ...) printf("%s\n", ... 
#elif TESTFLIGHT && FREEMIUM 
# define DLog(FORMAT, ...) printf("%s\n", ... 
#else 
# define DLog(...) 
#endif 
2

Wenn Sie die Existenz der Definition wie folgt verwenden, verwenden Sie diese Syntax zu kombinieren:

#if defined TESTFLIGHT && defined FREEMIUM 

(#ifdef ist eine Abkürzung für #if defined). Verwenden Sie für "else if", um ohne Verschachtelung zu kaskadieren.


können Sie den Booleschen Operator straight-up wie Sie wollen, wenn Sie die Konstante sind zu definieren, dass sie gleich etwas (zum Beispiel 1) anstatt nur wird „definiert“. z.B.

#define TESTFLIGHT 1 
#define FREEMIUM 1 

... 

#if TESTFLIGHT && FREEMIUM 
0

Sie müssen "normal" #if verwenden: für #if defined(FOO)

Sie sind auch fehlt ein #endif

#if defined(TESTFLIGHT) && defined(FREEMIUM 

#ifdef FOO ist einfach zu kurz. So vollständig ist es:

Verwandte Themen