printf语句的困扰

    最近在做程序分析模块,需要对源代码进行分析,从而得出该源代码的相对权值,用这个相对权值代表该程序的相对复杂程度。基本思想是顺序分需程序代码,而在分析块位置时,由于想用一个函数返回2个值,因此想到了指针,代码如下:

  1. ..........
  2. int if块分支数(int if位置,int *if终点)
  3. {
  4.     int 分支 = 1;
  5.     int 块结束下一位置 = 块后面一个单词(分析if起点(if位置));
  6.     while(0==strcmp("else",wordTab[块结束下一位置]))
  7.     {
  8.         分支++;
  9.         if(0 == strcmp("if",wordTab[块结束下一位置+1]))
  10.         {
  11.         块结束下一位置 = 块后面一个单词(分析if起点(块结束下一位置+1));
  12.         }else
  13.         {
  14.             break;
  15.         }
  16.     }
  17.     *if终点 = 块结束下一位置-1;
  18.     return 分支;
  19. }
  20. main()
  21. {
  22. .......
  23. case 15://if
  24. {
  25.      int if结束点=0;
  26.      分析if起点(当前分析点);
  27.      
  28.      printf("/n该if语句分支数:%d,结束位置:%d",if块分支数(当前分析点,if结束点),if结束点);
  29.      当前分析点 = if结束点;
  30.      break;
  31. }
  32. ......
  33. }


      但运行输出,if结束位置一直为0,查了"if结束点"这个局部变量的地址,确实传递进去了,并且值也得到了改变。解决方案:后来想到C语言语句执行顺序的问题,进行了这个改变:


  1. ..........
  2. int if块分支数(int if位置,int *if终点)
  3. {
  4.     int 分支 = 1;
  5.     int 块结束下一位置 = 块后面一个单词(分析if起点(if位置));
  6.     while(0==strcmp("else",wordTab[块结束下一位置]))
  7.     {
  8.         分支++;
  9.         if(0 == strcmp("if",wordTab[块结束下一位置+1]))
  10.         {
  11.         块结束下一位置 = 块后面一个单词(分析if起点(块结束下一位置+1));
  12.         }else
  13.         {
  14.             break;
  15.         }
  16.     }
  17.     *if终点 = 块结束下一位置-1;
  18.     return 分支;
  19. }
  20. main()
  21. {
  22. .......
  23. case 15://if
  24. {
  25.      int if结束点=0;
  26.      分析if起点(当前分析点);
  27.      
  28.      printf("/n该if语句分支数:%d",if块分支数(当前分析点,if结束点));
  29.      printf("/n结束位置:%d",if结束点);
  30.      当前分析点 = if结束点;
  31.      break;
  32. }
  33. ......
  34. }

      得到了正确的输出,啥子原因呢?难道printf从右往左输出?还是先进行了缓存?知道的大侠,请指导~
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值