だから私はこのコードに出くわしました:
%:include <stdio.h>
int main(int argc, char *argv<::>) <%
printf("C program succesfully running...");
getchar();
return 0;
%>
これはコンパイラのバグですか、それとも問題なく実行されているため、まだ発見していない新しいものですか。
だから私はこのコードに出くわしました:
%:include <stdio.h>
int main(int argc, char *argv<::>) <%
printf("C program succesfully running...");
getchar();
return 0;
%>
これはコンパイラのバグですか、それとも問題なく実行されているため、まだ発見していない新しいものですか。
ここで説明されているように、このコードは C ダイグラフを使用します: http://en.wikipedia.org/wiki/Digraphs_and_trigraphs#C
C 標準 (ISO/IEC 9899:201x、Punctuators §6.4.6:3) では、この問題について次のように述べています。
言語のすべての側面において、6 つのトークン
<: :> <% %> %: %:%:
それぞれ、6 つのトークンと同じように動作します。
[ ] { } # ##
彼らのスペルを除いて。
それはすべて、C 言語の非常に禅的な小さなコーナーです。
昔は、端末やキーボードは、プログラミングに必要なすべての文字をサポートしていないことがよくありました。そのため、ダイグラフとトリグラフが導入されました。
最新のコンパイラがまだそれらをサポートしていることに驚いていますが、それはあります。
C99 で導入されたDigraph 。
C99 6.4.6 句読点
言語のすべての側面において、6 つのトークン
<: :> <% %> %: %:%:
それぞれ、6 つのトークンと同じように動作します。
[ ] {} # ##
彼らのスペルを除いて。
これらは句読点で%:
あり、などと同じで #
あり%>
、同じ}
です... C99ドラフト標準セクションの6.4.6
句読点は次のように述べています。
言語のすべての側面において、6 つのトークン67)
<: :> <% %> %: %:%:
それぞれ、6 つのトークンと同じように動作します。
[ ] { } # ##
注記にあるように、ダイグラフと呼ばれることもあり67
ます。
これらのトークンは「ダイグラフ」と呼ばれることもあります。