CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
【经验总结】不能实施并行处理的情况 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  数据结构与算法

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

楼主jerryllk(jerry)2003-12-07 01:53:32 在 专题开发/技术/项目 / 数据结构与算法 提问

看见有人用,不知道为什么 问题点数: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

相关问题

  • #define WINVER 0x0500这个宏是干什么用的.
  • boost干什么用?
  • 一个很基本的C 问题:#define ANSI_ARGS(x) x 是干什么用的?
  • EXPSRV.DLL 是干什么用的??
  • split是干什么用的?
  • powerdesign是干什么用的?
  • 我能用c干什么?
  • ASSERT()是干什么用的
  • lsass.exe和mad.exe干什么用?
  • DOS.h是干什么用的?

关键词

  • 代码
  • 定义
  • 看见
  • define
  • 知道
  • unsigned

得分解答快速导航

  • 帖主:jerryllk

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
惹火投票。。火热进行中...
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
CSDN网站24小时值班电话:13552009689
Copyright © 2000-2009, CSDN.NET, All Rights Reserved
GongshangLogo