2010-06-11 8 views
2

Désolé je sais que c'est basique, mais peut-être n'existe-t-il pas ou je ne google pas les bons mots. Y at-il et un if not (est-ce ifndef?) Un AND et un OR si je pouvais faire quelque chose comme:Décisions du préprocesseur C++

if not DEBUG and MACOS 

Répondre

13

Je pense que quelque chose comme #if !defined(DEBUG) && defined(MACOS) devrait le faire.

3

#ifndef and #if faire des choses différentes donc il dépend de ce que vous voulez. #ifndef est vrai lorsqu'il n'existe aucun symbole de préprocesseur défini correspondant au nom suivant. #if est vrai lorsque l'expression de préprocesseur suivante est non nulle.

Vous pouvez utiliser la norme & & et || les opérateurs.

2
#if !DEBUG && MACROS

ou

#if !DEBUG & !MACROS

en fonction de ce que vous recherchez. défini() peut également aider

#if !defined(DEBUG) && defined(MACROS)
3
#if !defined(DEBUG) && defined(MACOS) 
#error "Ouch!" 
#endif 

des tests, si ces macros/valeurs sont définies (même mis à 0 moyens définis). Laissez le "defined()" et tester à nouveau une valeur, en fonction de vos macros, comme

#if DEBUG==0 && MACOS==1 
#error "Spam!" 
#endif 
1

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

ou

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

en fonction de ce que vous essayez de évaluer.

0

Consultez la bibliothèque de prétraitement Boost. Il peut accomplir un grand nombre de tâches en utilisant le préprocesseur.

1

#if, #else et #endif sont générales. Utilisez #define pour déclarer et #undef pour annuler la déclaration. Utilisez #ifdef pour vérifier si elle est déclarée et #ifndef pour vérifier, si elle n'est pas déclarée.

Exemple:

#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