Подтвердить что ты не робот

Как этот безрецептурный/бесцельный код действителен?

Итак, я наткнулся на эту часть кода:

%:include <stdio.h>

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

    return 0;
%>

Является ли это некоторой ошибкой компилятора или это что-то новое, которое я еще не обнаружил, потому что он работает без каких-либо проблем.

4b9b3361

Ответ 1

В этом коде используются C-орграфы, как описано здесь: http://en.wikipedia.org/wiki/Digraphs_and_trigraphs#C

В стандарте C (ISO/IEC 9899: 201x, пунктуаторы §6.4.6: 3) говорится об этом:

Во всех аспектах языка шесть жетонов

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

ведут себя соответственно так же, как шесть токенов

[ ] { } # ##

за исключением их написания.

Ответ 2

Это пунктуаторы, а %: совпадает с # и %> совпадает с } и т.д. черновик C99 стандартный раздел 6.4.6 Посвященные говорит:

Во всех аспектах языка шесть токенов 67)

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

ведут себя соответственно так же, как шесть токенов

  [   ] {    }   #   ##

Они также иногда ссылаются на орграфы, как мы видим в примечании 67:

Эти жетоны иногда называются "орграфами".

Ответ 3

Это очень маленький Zen-угол языка C.

В прежние дни терминалы и клавиатуры часто не поддерживали все символы, которые могут потребоваться для программирования; поэтому digraphs и введены триграфы.

Я удивлен, что любой современный компилятор все еще поддерживает их, но там он.

Ответ 4

Digraph, представленный на C99.

C99 6.4.6 Пунктуаторы

Во всех аспектах языка шесть жетонов

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

ведут себя соответственно так же, как шесть токенов

[ ]  {} # ##

за исключением их написания.