Obj-C, используя параметры ifndef и target только для строк отладки printf? - PullRequest
1 голос
/ 26 марта 2012

Я с радостью использовал замену NSLog под названием DLog, так что мне не нужно беспокоиться об отладке, оставленной в сборке релиза.

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

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

Однако я хотел бы сделать немного более сложным, у меня есть множество целей с параметрами отладки, и я хотел бы включить два параметра, чтобы я мог получить отладочную информацию.

Я надеялся, что смогу использовать что-то вроде этого ...

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

Но это не так просто ... Я, наверное, упускаю что-то очевидное?

Я погуглил проблему, но не могу найти оператор AND для этой цели, и вложенные операторы IF тоже кажутся проблемой?

Ответы [ 3 ]

2 голосов
/ 26 марта 2012

Когда вы используете такое определение, чтобы объединить, используйте следующий синтаксис:

#if defined TESTFLIGHT && defined FREEMIUM 

(#ifdef - сокращение от #if defined). Используйте #elif для «else if» для каскадирования без вложенности.


Вы можете использовать логический оператор прямо так, как вам хочется, если вы определяете константу равной чему-то (например, 1), а не просто «определяете». например,

#define TESTFLIGHT 1
#define FREEMIUM   1

...

#if TESTFLIGHT && FREEMIUM
0 голосов
/ 26 марта 2012

Вы должны использовать "#elif", чтобы сделать else if, вместо вложенного ifs.

И вы можете использовать определенное #if (TESTFLIGHT) && определенное (FREEMIUM), как сказано в других ответах. Итак:

#ifndef NDEBUG
#   define DLog(FORMAT, ...) printf("%s\n", ...
#elif TESTFLIGHT && FREEMIUM
#   define DLog(FORMAT, ...) printf("%s\n", ...
#else
#   define DLog(...)
#endif
0 голосов
/ 26 марта 2012

Вам нужно использовать «обычный» #if:

#if defined(TESTFLIGHT) && defined(FREEMIUM

#ifdef FOO это просто сокращение от #if defined(FOO)

Вам также не хватает #endif. Так вот, это:

#ifndef NDEBUG
#  define DLog(FORMAT, ...) printf("%s\n", ...
#else
#  if defined(TESTFLIGHT) && defined(FREEMIUM)
#    define DLog(FORMAT, ...) printf("%s\n", ...
#  else
#    define DLog(...)
#  endif
#endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...