替用运算符

看这样一段代码,你能认出是什么语言吗?

%: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++中

猜你喜欢

转载自www.cnblogs.com/velscode/p/10549086.html
0条评论
添加一条新回复
  
今日推荐