Как этот безрецептурный/бесцельный код действителен?
Итак, я наткнулся на эту часть кода:
%:include <stdio.h>
int main(int argc, char *argv<::>) <%
printf("C program succesfully running...");
getchar();
return 0;
%>
Является ли это некоторой ошибкой компилятора или это что-то новое, которое я еще не обнаружил, потому что он работает без каких-либо проблем.
Ответы
Ответ 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 Пунктуаторы
Во всех аспектах языка шесть жетонов
<: :> <% %> %: %:%:
ведут себя соответственно так же, как шесть токенов
[ ] {} # ##
за исключением их написания.