看这样一段代码,你能认出是什么语言吗?
%:include <stdio.h>
char a<:4:>={'A','B','C','D'};
int main()
<%
printf("%c\n",a<:1:>);
return 0;
%>
emmm..看stdio.h好像是C语言吧,可%: <%%> <::>都是什么鬼?
如果你将这段代码保存为.c后缀的文件编译运行一下,你会发现,这是地地道道的C语言!
这段代码等价于
#include <stdio.h>
char a[4]={'A','B','C','D'};
int main()
{
printf("%c\n",a[1]);
return 0;
}
我们再来看下面这段代码
#include <stdio.h>
#include <iso646.h>
int main()
{
int a=2, b=3;
if( a not_eq b )
printf("yes!");
}
运行结果
这里,not_eq 起到了运算服“!=”的作用。为什么呢
秘密出在iso646.h这个头文件上。我们不妨打开看看
//省略官方套话
#ifndef _ISO646_H
#define _ISO646_H
#ifndef __cplusplus
#define and &&
#define and_eq &=
#define bitand &
#define bitor |
#define compl ~
#define not !
#define not_eq !=
#define or ||
#define or_eq |=
#define xor ^
#define xor_eq ^=
#endif
#endif
原来,这个头文件里定义了许多的宏定义,将运算符使用一些拼写进行了替换!
看到这里,你可能会问,这不是自找麻烦吗?
明明两个符号就可以搞定的东西,为什么要用英文去拼写呢?把#换成%:有什么意思吗?
别急,这么换,还真是有讲究的。
C是在美国使用标准美式键盘的系统上发展而来的
但在世界各地,并不是所有的键盘都有与美式键盘相同的的符合。
例如下面这个德文键盘
你看,你能在上面找到方括号,井号吗?找不到。
那么德国人写C语言如果要声明一个数组,怎么办呢?
为了解决这样的问题,C99标准为逻辑运算符增加了可供选择的拼写法。
这样,即使德国人键盘上没有< #这些符号,也可以通过%、:、<等符号进行替代。
值得一提的是,在C++中
原文:https://www.cnblogs.com/velscode/p/10549086.html