C语言之三联符

考察如下 C 程序:

??=include<stdio.h>
int main()??<printf("Hello World!\n");return 0;??>

你可能看着会觉得很奇怪, 然而这却是一段合法的 C 程序, 我在 vc2008 中尝试编译并成功.

实际上, 三联符序列就是以 ?? 开头的三个字符, 用来对某个其它字符进行指定替换, 替换规则如下表:

三联符

替换

??=

#

??/

\

??’

^

??(

[

??)

]

??!

|

??<

{

??>

}

??-

~

现在就可以解释很久以前某人遇到过的一个奇怪问题了:

//?? blah blah ??/
printf("Hello World!\n");

以上程序中没有任何输出. 这个问题曾被群讨论归结为 vc6 的 bug, vc6 的确有很多 bug, 不过很可惜, 这不是其中的一个.

解释:??/ 被替换成\ ,而反斜杠表示断行,所以最开始的//连printf行一起注释掉了。

1994 年 C 语言标准的一个修订增加了二联符序列, 现在已经被包含到 C99 中, 二联符序列的对应规则如下:

二联符

替换

<:

[

:>

]

<%

{

%>

}

%:

#

不过据我所知, 大部分编译器还不支持二联符序列, 包括我正在使用的 vc2008.

原文连接:http://hi.baidu.com/iceboy_/item/d1a0d44d72507feba4c066e1

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值