12

所以我遇到了这段代码:

%:include <stdio.h>

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

    return 0;
%>

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

4

4 回答 4

13

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

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

在语言的各个方面,六个记号

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

行为,分别与六个令牌相同

[ ] { } # ##

除了他们的拼写。

于 2013-10-28T12:43:48.260 回答
1

这些是标点符号,与等%:相同, #与等%>相同}... C99草案标准部分6.4.6 标点符号说:

在语言的所有方面,六个标记67)

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

行为,分别与六个令牌相同

  [   ] {    }   #   ##

正如我们在注释中看到的那样,它们有时也被称为有向图67

这些标记有时被称为“有向图”。

于 2013-10-28T12:44:06.943 回答
1

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

在过去,终端和键盘通常不支持编程所需的所有字符。所以介绍了二合字母和三合字母。

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

于 2013-10-28T12:45:06.893 回答
1

Digraph,在 C99 中引入。

C99 6.4.6 标点符号

在语言的各个方面,六个记号

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

行为,分别与六个令牌相同

[ ]  {} # ##

除了他们的拼写。

于 2013-10-28T12:46:45.290 回答