7
votes

C ++ écriture 'ou' au lieu de ||

Dupliqué possible:
jetons alternatifs C ++?

Je travaille sur une mission en C ++ avec un de mes amis et nous faisons beaucoup de codage sur son ordinateur / environnement (un MacBook Pro avec Eclipse). Dans une partie du code, il a des conditions écrites en utilisant et et ou plutôt que && et || . Le code compile tout simplement bien sur son ordinateur, mais lorsque j'essaie de le compiler sur mon ordinateur à la maison (un PC avec Visual Studio 2010), je reçois des erreurs de compilateur et je suis obligé de les changer. Mon ami atteste également que cette syntaxe a fonctionné à l'aide d'EMACS / G ++ dans un environnement Linux.

Je n'avais jamais vu ce type de chose auparavant. Est-ce utilisé largement ou pris en charge par la plupart des compilateurs?


1 commentaires

Voir aussi: msdn.microsoft.com/en-us/library/34h23df8.aspx sous "iso646.h non activé"


5 Réponses :


-1
votes

Il est soit causé par une extension de compilateur ou un #define ailleurs dans le code source, éventuellement à partir de iso646.h définir ing ou doit être || et et pour être && . Vous pouvez également voir quelque chose comme utiliser pas à la place de ! aussi.

S'il s'agit d'une extension de compilateur et que vous souhaitez éviter de passer à travers et de changer tout le ou et et sur || et && , ajoutez simplement un #define #define #define s de votre propre en haut: xxx


5 commentaires

Aurait-il plus de sens alors de toujours simplement utiliser la version standard? On dirait que c'est le plan d'action le plus intelligent.


Non, et / ou / eq / bitand / etc. sont des mots-clés de C ++. Ce sont des synonymes pour les opérateurs.


@Chris Pouvez-vous vraiment compter quelque chose qui doit être définir d comme mot clé?


@Seth - ils ne doivent pas nécessairement être #define d. Ce sont des mots-clés. Visual C ++ ne suit pas les normes.


@Seth: Selon la norme C ++, ils sont des mots réservés et ne peuvent pas être définis comme des macros. Dans Visual C ++, comme C, ils sont activés par iso646.h . Mais si Visual C ++ utilise des macros pour les implémenter, c'est un détail de mise en œuvre. Cela ne le rend pas légal pour le programmeur de #undef ou redéfinissez-les (malheureusement, puisque j'ai voulu #undef eux).



1
votes

Pourriez-vous ajouter définir S au sommet pour les déplacer? XXX


3 commentaires

Strictement parler, non, car et et ou sont des mots-clés et ne peuvent pas être définis comme des macros.


@Jamesmcnellis: Strictement parlant, ce sont des jetons alternatifs, pas des mots-clés. Vous pouvez toujours le faire car techniquement #define et && est simplement une autre façon d'épeler #define && && qui n'est pas légal.


@Chals: Oh. Eh bien, il est très trompeur qu'ils sont énumérés dans le sous-paragraphe nommé "Mots-clés". Vous avez raison, bien sûr.



3
votes

Ils s'appellent Synonymes de l'opérateur , et Ils font apparemment partie de la norme, mais je ne sais pas à quel point ils sont largement soutenus.


0 commentaires

6
votes

3 commentaires

Être c ++, ne devrait-il pas être ? Et ce fichier n'est-il pas censé être vide?


Non, étant C ++, vous n'avez besoin de rien. Ce sont des mots-clés. Blâmer votre compilateur si cela ne fonctionne pas.


@MARTINHO: CISO646 est juste un alias pour iso646.h , car il n'y a pas de noms pour entrer dans l'espace de noms STD. Et l'un ou l'autre est un non-op en mode C ++ avec n'importe quel compilateur conforme. Étant donné que l'ajout #include ne nuira à aucun compilateur de conformation et fera du travail visuel C ++, alors pourquoi pas?



10
votes

Il existe une poignée de "représentations alternatives": et , and_eq , bitand , bititor , < Code> complex , pas , non_eq , ou , ou_eq , xor , et xor_eq . Ils sont une fonctionnalité de langue standard de C ++.

Visual C ++ ne prend en charge que comme des mots-clés si vous compilez avec le drapeau / za (mode de conformité des normes).


0 commentaires