Boolean dans ifdef: est “#ifdef Un && B” est la même “#if defined(A) && défini(B)”?
En C++, est-ce:
#ifdef A && B
la même chose que:
#if defined(A) && defined(B)
?
Que je pensais qu'il n'était pas, mais je n'ai pas été en mesure de trouver une différence avec mon compilateur (VS2005).
- double possible de: stackoverflow.com/questions/965700/... je vois qu'ils sont le C et le C++, mais les préprocesseurs sont fondamentalement les mêmes: stackoverflow.com/questions/5085533/...
- Quelqu'un de devis et d'interpréter la norme de décider si c'est légal ou pas (il ne doit pas travailler pour vous, mais faut-il compiler)? Je ne suis pas en mesure de bout de 15 minutes de lecture chap 16 Prétraitement des directives".
Vous devez vous connecter pour publier un commentaire.
Ils ne sont pas les mêmes. Le premier ne fonctionne pas (je l'ai testé dans gcc 4.4.1). Message d'erreur était:
Si vous voulez vérifier si plusieurs choses sont définies, utilisez le deuxième.
Compilation Conditionnelle
Les résultats suivants sont les mêmes:
1.
2.
#else
, pourrait causer un problème. Seule la première option signifie, en fait, exactement ce que la personne a demandé.Pour ceux qui pourraient être à la recherche par exemple (UNIX/g++) qui est un peu différent de l'OP, ça peut aider:
`
De VS2015 aucun des travaux ci-dessus. La directive appropriée est:
voir plus ici
Je pense que peut-être OP voulez poser à propos de la déclaration "#si COND_A && COND_B", pas "#ifdef COND_A && COND_B"...
Ils sont également différents. "#si COND_A && COND_B" peut juger de logic express, juste comme ça:
même, une variable dans votre code peut également être utilisé dans cette macro de tresorerie:
#
en C++ (en ignorant les principaux espaces) est un directive de préprocesseur. Il est exécuté sur le code avant la compilation, assemblage, ou de lien -- en d'autres termes, avant que le compilateur a une idée de ce que toute valeur de la variable est, ou même que les variables sont une chose. Il ne fait absolument aucun sens de dire qu'ils sont capables de dire en quelque sorte la valeur de la ligne qu'ils se trouvent à l'; étant donné que cela serait susceptible d'exiger l'exécution du code, et le code n'a pas été compilé encore, il est en fait impossible. Je pense peut-être que vous vouliez parler de laif
déclaration.