#define for if(0) ; else for 是干什么用的?

jerryllk 2003-12-07 01:53:32
看见有人用,不知道为什么
...全文
722 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
短歌如风 2003-12-13
  • 打赏
  • 举报
回复
>原来如此。
>再问个问题,为什么不定义成
>#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)匹配的。
springzct 2003-12-13
  • 打赏
  • 举报
回复
plainsong(短歌)
你真高!
Nownow 2003-12-09
  • 打赏
  • 举报
回复
果然很强啊~~
lld2001 2003-12-08
  • 打赏
  • 举报
回复
宏用的历害
ppgg1979 2003-12-08
  • 打赏
  • 举报
回复
ok
LeeMaRS 2003-12-07
  • 打赏
  • 举报
回复
昨天看见neal大大在ZJU的论坛上问了^^ 狗狗给答案了~ 大家知道在VC里面, 在for循环语句中定义的变量是可以在整个程序段内使用的, 即这样 for(int i = 0; i < n; i++). 用这个宏代换的话, 就可以灭掉VC这个令人不爽的特性, 因为for是在else中, 相当于被一个{}括起来了.
tomb4 2003-12-07
  • 打赏
  • 举报
回复

受启发...
cafeeee 2003-12-07
  • 打赏
  • 举报
回复
To BlueSky2008(懒惰是程序员的美德)

如果
#define for if(1)for

那么
for(;;) { }
else { }
也合乎语法了!
BlueSky2008 2003-12-07
  • 打赏
  • 举报
回复
原来如此。
再问个问题,为什么不定义成
#define for if(1)for
ZhangYv 2003-12-07
  • 打赏
  • 举报
回复
编译能通过吗?
短歌如风 2003-12-07
  • 打赏
  • 举报
回复
根据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的定义就不会“遗害后人”了。
LeeMaRS 2003-12-07
  • 打赏
  • 举报
回复
小虎子...会这么叫我的估计只有Kluo一个人 -_-b
jerryllk 2003-12-07
  • 打赏
  • 举报
回复
Hehe ,小虎子,你知道我是谁么?
kbsoft 2003-12-07
  • 打赏
  • 举报
回复
狗狗的AC率的确惊人!:D

33,025

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧