笔试中遇到的题,具体记不太清了,描述类似下面:
编译运行下面的程序会出现什么样的结果?
#include
#define true 0
int main()
{
while(true)
{
std::cout }
return 0;
}
是编译错误呢?还是死循环呢?还是根本不进循环?当时确实不敢确定。后来回来运行了下,证实程序中定义的宏true将C++中的关键字true给覆盖掉了。在GCC4.5.0和VC6.0下测试通过。
居然连语言中的关键字都可以覆盖掉——真是感觉太不可思议了。
最近的一些笔试中频繁遇到了关于宏的东西,虽然喜欢C++的我一向对宏定义是能不用则尽量不用的,可是显然它在有些情况下是非常灵活实用的,还是需要学习一下相关的技巧。