12

だから私はこのコードに出くわしました:

%:include <stdio.h>

int main(int argc, char *argv<::>) <%
    printf("C program succesfully running...");
    getchar();

    return 0;
%>

これはコンパイラのバグですか、それとも問題なく実行されているため、まだ発見していない新しいものですか。

4

4 に答える 4

13

ここで説明されているように、このコードは C ダイグラフを使用します: http://en.wikipedia.org/wiki/Digraphs_and_trigraphs#C

C 標準 (ISO/IEC 9899:201x、Punctuators §6.4.6:3) では、この問題について次のように述べています。

言語のすべての側面において、6 つのトークン

<: :> <% %> %: %:%:

それぞれ、6 つのトークンと同じように動作します。

[ ] { } # ##

彼らのスペルを除いて。

于 2013-10-28T12:43:48.260 に答える
1

それはすべて、C 言語の非常に禅的な小さなコーナーです。

昔は、端末やキーボードは、プログラミングに必要なすべての文字をサポートしていないことがよくありました。そのため、ダイグラフとトリグラフが導入されました。

最新のコンパイラがまだそれらをサポートしていることに驚いていますが、それはあります。

于 2013-10-28T12:45:06.893 に答える
1

C99 で導入されたDigraph 。

C99 6.4.6 句読点

言語のすべての側面において、6 つのトークン

<: :> <% %> %: %:%:

それぞれ、6 つのトークンと同じように動作します。

[ ]  {} # ##

彼らのスペルを除いて。

于 2013-10-28T12:46:45.290 に答える
1

これらは句読点で%:あり、などと同じで #あり%>、同じ}です... C99ドラフト標準セクションの6.4.6 句読点は次のように述べています。

言語のすべての側面において、6 つのトークン67)

 <:  :> <%   %> %:  %:%:

それぞれ、6 つのトークンと同じように動作します。

  [   ] {    }   #   ##

注記にあるように、ダイグラフと呼ばれることもあり67ます。

これらのトークンは「ダイグラフ」と呼ばれることもあります。

于 2013-10-28T12:44:06.943 に答える