2013-10-28 6 views
12

So kam ich auf dieses Stück Code:Wie ist dieser klammerlose/klemmlose Code gültig?

%:include <stdio.h> 

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

    return 0; 
%> 

Ist dies einige Compiler Fehler oder ist das etwas Neues ich noch nicht entdeckt haben, weil es ohne Probleme läuft.

+0

Warum ist eckiger Code ein Problem? Das Unerwartete ist ein Code ohne Code – Cruncher

Antwort

14

Dieser Code verwendet C Digraphe, wie hier erklärt: http://en.wikipedia.org/wiki/Digraphs_and_trigraphs#C

Der C-Standard (ISO/IEC 9899: 201x, Interpunktionszeichen §6.4.6: 3) hat dies in der Sache zu sagen:

In allen Aspekten der Sprache, die sechs Token

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

verhalten jeweils die gleichen wie die sechs Token

[ ] { } # ## 

mit Ausnahme ihrer Schreibweise.

+0

Interessant, danke für den Link, es macht jetzt alles Sinn! – Houssni

+0

warum sollte man das tun ?! –

+1

@PeterMiehle Aus dem Link dieser Antwort: 'Tastaturen dürfen keine Tasten haben, um den gesamten Zeichensatz der Sprache abzudecken ' – Houssni

2

Dies sind Interpunktionszeichen und %: ist die gleiche wie # und %> ist die gleiche wie } etc ... Der C99 draft standard Abschnitt 6.4.6Interpunktionszeichen sagt:

In allen Aspekten der Sprache, die sechs tokens67)

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

verhalten jeweils die gleichen wie die sechs Token

[ ] { } # ## 

Sie sind auch referierten manchmal als Digraphe, wie wir in der Anmerkung 67 sehen:

Diese Tokens werden manchmal "Digraphen" genannt.

2

Es ist alles ein sehr Zen kleine Ecke der C-Sprache.

In den alten Tagen unterstützten Terminals und Tastaturen oft nicht alle Zeichen, die man zum Programmieren benötigen würde; So wurden digraphs und Trigraphen eingeführt.

Ich bin überrascht, dass jeder moderne Compiler sie noch unterstützt, aber da ist es.

2

Digraph, eingeführt in C99.

C99 6.4.6 Interpunktionszeichen

In allen Aspekten der Sprache, die sechs Token

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

verhalten jeweils die gleichen wie die sechs Token

[ ] {} # ## 

mit Ausnahme ihrer Rechtschreibung.