[学习]#define for if(0) ; else for 是干什么用的?
第一次见这语句也觉得挺怪的,原来如此:
1. 大家知道在VC里面, 在for循环语句中定义的变量是可以在整个程序段内使用的, 即这样 for(int i = 0; i < n; i++). 用这个宏代换的话, 就可以灭掉VC这个令人不爽的特性, 因为for是在else中, 相当于被一个{}括起来了.
2.
for(int i = 0; i < 5; i ++
{
...
}
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 ++)
...
这样i的定义就不会“遗害后人”了。
原文在此。
1. 大家知道在VC里面, 在for循环语句中定义的变量是可以在整个程序段内使用的, 即这样 for(int i = 0; i < n; i++). 用这个宏代换的话, 就可以灭掉VC这个令人不爽的特性, 因为for是在else中, 相当于被一个{}括起来了.
2.
6 楼plainsong(短歌)()回复于 2003-12-07 20:53:49 得分 0
根据C++标准:for(int i = 0; i < 5; i ++
{
...
}
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 ++)
...
这样i的定义就不会“遗害后人”了。
原文在此。

0 条评论:
发表评论
<< 主页