// test.c
// gcc test.c --- compile error
#include <stdio.h>
int main()
{
int a = (0) or (0);
printf("%d", a);
return a;
}
上面这段c代码能编译通过吗?答案是不能。gcc test.c
增加一个头文件,换成这样呢:
// test.c
// gcc test.c --- compile success
#include <stdio.h>
#include <iso646.h>
int main()
{
int a = (0) or (0);
printf("%d", a);
return a;
}
答案是能!
对于C++,不增加头文件,依然能编译过下面的test.cpp文件。
// test.cpp
// g++ test.cpp ---- compile success<pre name="code" class="cpp">#include <stdio.h>
#include <stdio.h>
int main()
{
int a = (0) or (0);
printf("%d", a);
return a;
}
Oh shit, g++什么时候自动支持这么”牛逼“的运算符了,这不是php和python的专利吗?不光是and or,ISO646标准一口气支持了一堆运算符:
宏 | 定义为 |
---|---|
and | && |
and_eq | &= |
bitand | & |
bitor | | |
compl | ~ |
not | ! |
not_eq | != |
or | || |
or_eq | |= |
xor | ^ |
xor_eq | ^= |
为什么这么做:http://zh.wikipedia.org/wiki/Iso646.h
做到了什么程度:http://zh.wikipedia.org/wiki/ISO/IEC_646
之所以发本文,是发现OceanBase代码中我写了一个or,被千拂同学review的时候发现。不过,居然没有被编译器发现。最近php写多了是么?