#define for if(0) ; else for 是干什么用的?
看见有人用,不知道为什么 问题点数:0、回复次数:14Top
1 楼ZhangYv(迎着朝阳,走向地狱)回复于 2003-12-07 09:16:50 得分 0
编译能通过吗?Top
2 楼LeeMaRS(小菜虎,仍需努力)回复于 2003-12-07 12:51:47 得分 0
昨天看见neal大大在ZJU的论坛上问了^^ 狗狗给答案了~ 大家知道在VC里面, 在for循环语句中定义的变量是可以在整个程序段内使用的, 即这样 for(int i = 0; i < n; i++). 用这个宏代换的话, 就可以灭掉VC这个令人不爽的特性, 因为for是在else中, 相当于被一个{}括起来了.Top
3 楼kbsoft(让世界充满爱!)回复于 2003-12-07 14:24:51 得分 0
狗狗的AC率的确惊人!:DTop
4 楼jerryllk(jerry)回复于 2003-12-07 14:27:37 得分 0
Hehe ,小虎子,你知道我是谁么?Top
5 楼LeeMaRS(小菜虎,仍需努力)回复于 2003-12-07 20:31:32 得分 0
小虎子...会这么叫我的估计只有Kluo一个人 -_-bTop
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的定义就不会“遗害后人”了。Top
7 楼BlueSky2008(懒惰是程序员的美德)回复于 2003-12-07 21:59:05 得分 0
原来如此。
再问个问题,为什么不定义成
#define for if(1)forTop
8 楼cafeeee(cafeeee)回复于 2003-12-07 22:08:40 得分 0
To BlueSky2008(懒惰是程序员的美德)
如果
#define for if(1)for
那么
for(;;) { }
else { }
也合乎语法了!Top
9 楼tomb4(nicky_hu)回复于 2003-12-07 22:49:28 得分 0
强
受启发...Top
10 楼ppgg1979(枝枝)回复于 2003-12-08 21:54:27 得分 0
okTop
11 楼lld2001(流云)回复于 2003-12-08 22:26:18 得分 0
宏用的历害Top
12 楼Nownow(林子)回复于 2003-12-09 08:57:18 得分 0
果然很强啊~~Top
13 楼springzct()回复于 2003-12-13 10:53:57 得分 0
plainsong(短歌)
你真高!Top
14 楼plainsong(短歌)()回复于 2003-12-13 12:40:51 得分 0
>原来如此。
>再问个问题,为什么不定义成
>#define for if(1)for
这样它就会对后面的代码产生影响。考虑这样的代码:
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)匹配的。Top



