Impression ?? et !! en séquence différente montrera une sortie différente

StackOverflow https://stackoverflow.com/questions/3862625

  •  27-09-2019
  •  | 
  •  

Question

J'avais trouvé une sortie étrange quand j'écris les lignes suivantes de manière très simple:

Code:

 printf("LOL??!\n");
 printf("LOL!!?\n");

Sortie: text alt

Il arrive même que le code est compilé sous les MBCS et UNICODE.

La sortie varie sur la séquence de « ? » et "!" ...

Toute idée?

Était-ce utile?

La solution

Vous pouvez essayer

printf( "What?\?!\n" );

Dans la programmation informatique, digrammes et trigrammes sont des séquences de deux et trois caractères, respectivement, qui sont interprétés comme un caractère par le langage de programmation.

Certains compilateurs prennent en charge une option pour activer la reconnaissance de trigraphes off ou trigraphes désactiver par défaut et nécessitent une option pour les activer. Certains peuvent émettre des avertissements lorsqu'ils rencontrent trigraphes dans les fichiers source. Borland fourni un programme distinct, le préprocesseur trigraph, doit être utilisé que lorsque le traitement de trigraph est souhaitée.

Autres conseils

??! est un trigraphes qui sera remplacé par |.

En règle générale, vous ne devriez jamais mettre ensemble deux caractères point d'interrogation ne importe où dans un fichier source.

Ils sont appelés Trigraph Sequences

??! est la séquence d'trigraph pour barre verticale |.

Le C / C ++ préprocesseur reconnaît les trigrammes et les remplace par leur caractère équivalent.
Donc, au moment où votre code est vu par le compilateur, les trigrammes sont déjà remplacés.

# grepping in the source file:
$ grep printf a.c      
  printf("foo: ??!");

# grepping the preprocessor output:
$ gcc a.c -trigraphs -E | grep printf | grep foo
  printf("foo: |");

??! est connu sous le nom trigraphes et est remplacé par | en sortie. Cochez cette

Il est une séquence spéciale de caractères dans une constante de chaîne qui a une signification particulière. Appelé trigraphes ils ont été initialement mis en œuvre parce que tous les terminaux pris en charge certains caractères.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top