2

最近、 Visual Studio 2008でバグに遭遇しました(少なくとも 1 つだと思います)。

2 つの疑問符の後に別の文字が続く文字列リテラルを作成しようとすると、奇妙なことが起こります。これらの 3 つの文字が別の文字に置き換えられます。

例:

printf("??-"); --> ~  (hyphen)
printf("??'"); --> ^  (circumflex)
printf("??="); --> #  (hash)
printf("??)"); --> ]  (square braket)
printf("??("); --> [  (square braket)
printf("??/"); --> \  (backslash)
printf("??!"); --> |  (pipe)
printf("??%"); --> ?? (percent sign disappears)

この交換の理由を知っている人はいますか?

4

1 に答える 1

4

これはバグではなく、歴史の余韻です。それらは C トライグラフです - https://msdn.microsoft.com/en-us/library/bt0y4awe.aspx

Di/Tri-graphs は、言語が開発されたときには簡単に利用できなかった文字を表す方法です。これらを使用すると、表示するキーボード キーがない可能性がある記号をソース コードに入力できます。

Tri-graph Symbol
??=       #
??/       \
??'       ^
??(       [
??)       ]
??!       |
??<       {
??>       }
??-       ~

% の問題は、見たい場合は % を % でエスケープする必要がある printf の通常の問題です。これは、通常、% が書式指定子の先頭であるためです。

于 2016-02-19T10:42:02.783 に答える