2013-10-28 11 views
12

は、だから私は、コードのこの作品に出会った:このブラケットレス/無差別コードはどのように有効ですか?

%:include <stdio.h> 

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

    return 0; 
%> 

は、これはいくつかのコンパイラのバグですか、これは何の問題もなく動作しているので、私はまだ発見されていない新しいものです。ここで説明したように

+0

ブラケットレスコードが問題になるのはなぜですか?不安定なことは無謀なコードです – Cruncher

答えて

14

このコードは、Cの有向グラフを使用しています。http://en.wikipedia.org/wiki/Digraphs_and_trigraphs#C

C規格(ISO/IEC 9899:201X、区切り子§6.4.6:3):

問題に言って、これは持っています言語のすべての側面において

六個のトークン

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

それぞれ挙動、六個のトークン

同じ10
[ ] { } # ## 

スペルを除きます。

+0

興味深い、リンクのおかげで、それは今すべての意味があります! – Houssni

+0

なぜそれをするべきですか? –

+1

@PeterMiehleこの答えのリンクから: 'キーボードは、言語の文字セット全体をカバーする鍵を持っていないかもしれない' – Houssni

2

これらは区切り子であり、%:#%>と同じである}などと同じです... C99 draft standardセクション6.4.6区切り子は言う:言語のすべての側面において

を、 6 tokens67)

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

振る舞い、それぞれ、同じように6つのトークン

[ ] { } # ## 

我々はノート67に見るように彼らはまた時々として有向グラフに査読されています

これらのトークンを「有向グラフ」と呼ばれることがあります。

2

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

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

現代のコンパイラはまだサポートしていますが、そこには驚いています。

2

Digraph(C99に導入)。

C99 6.4。6つの切子言語のすべての側面において

六個のトークン

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

それぞれ挙動、それらのスペルを除い

[ ] {} # ## 

6つのトークンと同じ。

関連する問題