替用运算符
看这样一段代码,你能认出是什么语言吗?
%:include <stdio.h>
char a<:4:>={'A','B','C','D'};
int main()
<%
printf("%c\n",a<:1:>);
return 0;
%>
emmm..看stdio.h好像是C语言吧,可%: <%%> <::>都是什么鬼?
如果你将这段代码保存为.c后缀的文件编译运行一下,你会发现,没有一点点的编译错误!
这段代码等价于
#include <stdio.h>
char a[4]={'A','B','C','D'};
int main()
{
printf("%c\n",a[1]);
return 0;
}
这里的奥秘其实来源于一个叫做ISO646的标准,我在国际标准组织官网找到了这份文件
看了一下,下载这个标准大概一个星期的伙食费就没了
果断百度盗版。
我们可以看到,这里给出了一张名为unique graphic character allocations(唯一图形字符分配)的表,受限于篇幅,我们省去字母部分,只看符号部分。
注意一下,这里边是没有包含#
和[]``{}
这几个写C语言程序时常用的字符的。
标准8.2给出了IRV(国际参考版本)
翻译一下开头的第一句话
this version is available for use when there is no requirement to use a national or an application-oriented version.
当不需要使用国家或面向应用程序的版本时,可以使用此版本。
小结一下官方的意思,只要你使用唯一图形字符分配中的字符,在各个国家和系统中都是通用的,但是如果你使用IRV中的字符,在某些国家可能是不通用的。
C是在美国使用标准美式键盘的系统上发展而来的,但在世界各地,并不是所有的键盘都有与美式键盘相同的的符合。
例如下面这个德文键盘
你看,你能在上面找到井号吗?找不到。
那么德国人写C语言如果要声明一个头文件,怎么办呢?
为了解决这样的问题,C99标准为逻辑运算符增加了可供选择的拼写法。
这样,即使德国人键盘上没有#这些符号,也可以通过%:等符号进行替代。
如果你对本博客有任何的疑问或者建议,欢迎联系作者:QQ944273070