这样它就会对后面的代码产生影响。考虑这样的代码:
if (a > b)
for (unsigned i = a - b; i < x; i ++)
dosomething(i);
else
dosomethingelse();
就会变成:
if( a > b)
if(1) for (unsigned i = a - b; i <x; i ++)
dosomething(i);
else
dosomethingelse();
这样dosomethingelse不会被调用。注意这时它成了与if(1)匹配的。
i的作用域应该是在花括号内。而VC6不符合标准,i的作用域会一直持续到后面:
int main()
{
for(int i = 0; i < 5; i ++
{
cout << i;//正确
}
cout << i;//按照标准应该错误,但在VC6中正确
int i;//按照标准应该正确,但在VC6中是重定义错。
}
因此在VC6中通常定义这样一个宏,这个上面的语句在宏被展开时就成了:
if (0)
else
for(int i = 0; i < 5; i ++)
...