印刷??と !!異なるシーケンスでは、異なる出力が表示されます

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

  •  27-09-2019
  •  | 
  •  

質問

次の行を非常に簡単な方法で書くと、奇妙な出力を見つけました。

コード:

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

出力:alt text

コードがMBCとUnicodeの両方の下でコンパイルされていることでさえ発生します。

出力は、「?」のシーケンスによって異なります。と "!"...

何か案が?

役に立ちましたか?

解決

あなたは試すかもしれません

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

コンピュータープログラミングでは、DigraphとTrigraphはそれぞれ2文字と3文字のシーケンスであり、プログラミング言語で1文字として解釈されます。

一部のコンパイラは、トライグラフの認識をオフにするか、デフォルトでトリグラフを無効にし、それらをオンにするオプションを必要とするオプションをサポートしています。ソースファイルでトライグラフに遭遇したときに警告を発することがあります。 Borlandは、Trigraph処理が必要な場合にのみ使用するために、別のプログラムであるTrigraph Preprocessorを提供しました。

他のヒント

??! aです トリグラフ それは置き換えられます |.

原則として、ソースファイルのどこにも2つの質問マーク文字を一緒に配置しないでください。

という トライグラフシーケンス

??! 垂直バーのトライグラフシーケンスです |.

C/C ++プリプロセッサは、トライグラフを認識し、それらを同等の文字に置き換えます。
そのため、コンパイラにコードが見られるまでに、トライグラフはすでに交換されています。

# 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: |");

??!トリグラフとして知られており、|に置き換えられます出力。これをチェックして リンク

これは、特別な意味を持つ文字列定数の特別な一連の文字です。すべての端子が一部の文字をサポートしているわけではないため、トリグラフと呼ばれていました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top