2508 votes

Quel est le C ??!??! opérateur?

J'ai vu une ligne de C qui ressemblait à ceci:

!ErrorHasOccured() ??!??! HandleError();

Il a compilé correctement et semble fonctionner ok. Il semble que c'est de vérifier si une erreur s'est produite, et si elle a, il les manipule, mais je ne suis pas vraiment sûr de ce qu'il est en train de faire ou comment le faire. Il ne ressemble à le programmeur est d'essayer d'exprimer ses sentiments sur les erreurs.

Je n'ai jamais vu l' ??!??! avant dans tout langage de programmation, et je ne peux pas trouver de la documentation pour elle n'importe où. (Google n'aide pas avec des termes de recherche comme ??!??!). Que fait-il et comment l'exemple de code de travail?

2000voto

user786653 Points 9811

??! est un trigraph qui se traduit par |. Donc, il dit:

!ErrorHasOccured() || HandleError();

qui, en raison d'un court-circuit, est équivalent à:

if (ErrorHasOccured())
    HandleError();

Gourou de la Semaine (traite de C++, mais qui sont pertinentes ici), où j'ai pris cette place.

Origine Possible de trigraphs ou comme @DwB points dans les commentaires c'est probablement dû à l'EBCDIC être difficile (encore une fois). Cette discussion sur l'IBM developerworks conseil semble à l'appui de cette théorie.

À partir de la norme ISO/IEC 9899:1999 §5.2.1.1, note de bas de page 12 (h/t @Random832):

Le trigraph séquences de permettre la saisie de caractères qui ne sont pas définis dans le Code Invariant Définir comme décrites dans la norme ISO/IEC 646, qui est un sous-ensemble de sept bits de NOUS jeu de caractères ASCII.

581voto

DigitalRoss Points 80400

Un très commune terminal utilisateur à partir de la première Unix et C de l'époque était l'ASR-33 Téléscripteur.

Cet appareil a été lente (10 cps) et bruyant et moche, et c'est la vue du jeu de caractères ASCII terminée à 0x5f, de sorte qu'il n'avait pas de

{ | } ~ 

Le trigraphs ont été définis de telle sorte que les programmes en C pourrait utiliser le code ASCII du caractère sous-ensemble trouvé sur le ASR-33 et dans d'autres environnements, manque le haut de valeurs ASCII.

202voto

Joel Falcou Points 3791

C'est un C trigraph :

http://en.wikipedia.org/wiki/Digraphs_and_trigraphs#C

??! être |

c'est donc l'opérateur ||

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X