免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123456789
最近访问板块 发新帖
楼主: koolcoy
打印 上一主题 下一主题

求助: 在if中定义的变量 [复制链接]

论坛徽章:
0
81 [报告]
发表于 2007-08-14 16:39 |只看该作者
我也贴段代码,针对楼主的,int i;这个,i在没使用的情况下


  1. #include <stdio.h>
  2. int main(int argc, char **argv)
  3. {
  4.         int x = 100;
  5.         if (x)
  6.         {
  7.                 int i;
  8.                 int i2;
  9.         }
  10.         return 0;
  11. }
复制代码


两个编译的结果如下:


  1. 默认的,没优化的: g++ -S

  2.         .file        "test.cpp"
  3.         .text
  4.         .p2align 1,0x90
  5.         .p2align 2,,3
  6. .globl main
  7.         .type        main, @function
  8. main:
  9. .LFB3:
  10.         pushl        %ebp
  11. .LCFI0:
  12.         movl        %esp, %ebp
  13. .LCFI1:
  14.         subl        $24, %esp
  15. .LCFI2:
  16.         andl        $-16, %esp
  17.         movl        $0, %eax
  18.         addl        $15, %eax
  19.         addl        $15, %eax
  20.         shrl        $4, %eax
  21.         sall        $4, %eax
  22.         subl        %eax, %esp
  23.         movl        $100, -4(%ebp)
  24.         movl        $0, %eax
  25.         leave
  26.         ret
  27. .LFE3:
  28.         .size        main, .-main
  29.         .ident        "GCC: (GNU) 3.4.6 [FreeBSD] 20060305"
复制代码


  1. 优化后的:g++ -S -O3
  2.         .file        "test.cpp"
  3.         .text
  4.         .p2align 1,0x90
  5.         .p2align 2,,3
  6. .globl main
  7.         .type        main, @function
  8. main:
  9. .LFB3:
  10.         pushl        %ebp
  11. .LCFI0:
  12.         movl        %esp, %ebp
  13. .LCFI1:
  14.         subl        $8, %esp
  15. .LCFI2:
  16.         andl        $-16, %esp
  17.         subl        $16, %esp
  18.         xorl        %eax, %eax
  19.         leave
  20.         ret
  21. .LFE3:
  22.         .size        main, .-main
  23.         .ident        "GCC: (GNU) 3.4.6 [FreeBSD] 20060305"
复制代码


好像if都没啦

论坛徽章:
0
82 [报告]
发表于 2007-08-14 17:07 |只看该作者
我举一个例子,大家研究下
void func(int x);
if (expression)
{
func(3);
}

func的形参参数x是一个整型,对吧
如果expression成立,调用func的时候,在栈内生成一个变量x,并赋值3
如果expression不成立,不调用func,那么变量x就不会出现在栈里
这点大家没有异议吧

论坛徽章:
0
83 [报告]
发表于 2007-08-14 17:55 |只看该作者
不管它是否存在,都只能在 { } 之内访问。
我认为这是个好习惯,临时变量尽量随时声明随时使用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP