Решения препроцессора C ++ - PullRequest
2 голосов
/ 11 июня 2010

Извините, я знаю, что это просто, но, возможно, его нет, или я не подбираю правильные слова. Есть ли if not (это ifndef?) AND и OR, чтобы я мог сделать что-то вроде:

if not DEBUG and MACOS

Ответы [ 7 ]

13 голосов
/ 11 июня 2010

Я думаю, что-то вроде #if !defined(DEBUG) && defined(MACOS) должно сделать это.

3 голосов
/ 11 июня 2010
#if !defined(DEBUG) && defined(MACOS)
#error "Ouch!"
#endif

проверяет, определены ли эти макросы / значения (даже если установлено значение 0, значит, определено). Не указывайте «define ()» и снова проверьте значение в зависимости от ваших макросов, например

#if DEBUG==0 && MACOS==1
#error "Spam!"
#endif
3 голосов
/ 11 июня 2010

#ifndef and #if делать разные вещи, так что это зависит от того, что вы хотите. #ifndef - истина, когда нет определенного символа препроцессора, соответствующего имени, следующему. #if имеет значение true, когда следующее выражение препроцессора имеет ненулевое значение.

Вы можете использовать стандартные && и || операторы.

2 голосов
/ 11 июня 2010
#if !DEBUG && MACROS

или

#if !DEBUG & !MACROS

в зависимости от того, что вы ищете. определение () также может помочь

#if !defined(DEBUG) && defined(MACROS)
1 голос
/ 11 июня 2010

#if, #else и #endif являются общими.Используйте #define для объявления и #undef для объявления.Используйте #ifdef, чтобы проверить, объявлено ли, и #ifndef, чтобы проверить, не объявлено ли.

Пример:

#ifndef LABEL
#define LABEL some_value // declares LABEL as some_value
#else
#undef LABEL // undeclare previously declared LABEL...
#define LABEL new_value // to declare a new_value
#endif
1 голос
/ 11 июня 2010

#if !(defined(DEBUG) && defined(MACOS))

или

#if !defined(DEBUG) && !defined(MACOS)

в зависимости от того, что вы пытаетесь оценить.

0 голосов
/ 11 июня 2010

Проверьте библиотеку предварительной обработки Boost. Он может выполнять большое количество задач с помощью препроцессора.

...