霸道的#define

来源:互联网 发布:硬骨头淘宝 编辑:程序博客网 时间:2024/04/29 01:42

笔试中遇到的题,具体记不太清了,描述类似下面:

编译运行下面的程序会出现什么样的结果?

#include
#define true 0
int main()
{
while(true)
{
std::cout << “hello” << std::endl;
}
return 0;
}

是编译错误呢?还是死循环呢?还是根本不进循环?当时确实不敢确定。后来回来运行了下,证实程序中定义的宏true将C++中的关键字true给覆盖掉了。在GCC4.5.0和VC6.0下测试通过。

居然连语言中的关键字都可以覆盖掉——真是感觉太不可思议了。

最近的一些笔试中频繁遇到了关于宏的东西,虽然喜欢C++的我一向对宏定义是能不用则尽量不用的,可是显然它在有些情况下是非常灵活实用的,还是需要学习一下相关的技巧。