这种无支架/无支架代码有效吗?

时间:2013-10-28 12:41:59

标签: c

所以我遇到了这段代码:

%:include <stdio.h>

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

    return 0;
%>

这是一些编译器错误还是这个我尚未发现的新东西,因为它运行没有任何问题。

4 个答案:

答案 0 :(得分:14)

此代码使用C有向图,如下所述:http://en.wikipedia.org/wiki/Digraphs_and_trigraphs#C

C标准(ISO / IEC 9899:201x,Punctuators§6.4.6:3)对此事有这样的说法:

  

在语言的所有方面,六个令牌

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

分别表现为与六个令牌相同

[ ] { } # ##
     

除了他们的拼写。

答案 1 :(得分:2)

这些是标点符号,%:#相同,%>}等相同... C99 draft standard部分{{1 } 标点符号说:

  

在语言的各个方面,六个令牌67)

     
6.4.6
  
     

分别表现为与六个令牌相同

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

它们有时也被称为 digraphs ,正如我们在注释 [ ] { } # ## 中看到的那样:

  

这些代币有时被称为“有向图”。

答案 2 :(得分:2)

这是C语言的一个非常禅的小角落。

在过去,终端和键盘通常不支持编程所需的所有角色;所以引入了digraphs和三字符。

我很惊讶任何现代编译器仍然支持它们,但它确实存在。

答案 3 :(得分:2)

Digraph,在C99中介绍。

  

C99 6.4.6标点符号

     

在语言的所有方面,六个令牌

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

分别表现为与六个令牌相同

[ ]  {} # ##
     

除了他们的拼写。