关于#define for if(false);else for
今日在看一个第三方代码时看到了#define for if(false);else for 这样的一种定义,不明白这样用法的目的,于是查了一下。
这是一个兼容vc6.0的用法,csdn上有这个问题的回答http://bbs.csdn.net/topics/40398205
因为自从毕业以后就几乎没接触过vc6了,还真不知道有这么一回事,vc6中 for表达式的作用域居然违背了c++标准。
如:
for (int i = 0 ; i < 5; i++)
{
cout << i;
}
i = 2;
照理说,最后i = 2,编译器会认为是变量未定义,但vc6却认为 i 已经在for循环中定义了。
所以把 for 定义为 if(false);else for 之后,上诉代码就会展开为
if (false);
else
for (int i = 0 ; i < 5; i++)
{
cout << i;
}
i = 2;
相当于在for外层包了一层{}
这个问题让我想起一次面试的时候,看到一道类似的在for循环外,用到了i变量的题目,我当时还以为题目出错了,万万没想到还真有这么任性的编译器
打码程序员,不LoL不通宵