打印

谁能给讲讲两种写法

[复制链接]
1994|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
houcs|  楼主 | 2014-7-12 18:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C语言允许在模块内部定义仅限此模块使用的局部变量,如
void 函数(void){
      ....
      {
          char a;
          ....
      }
      ....
}
但是比较少看到有人这么做,不知是不是习惯的原因。
假如一个函数中有多个部分用到相同类型的局部变量,并且每个部分是按先后顺序相互独立的,如按照一般习惯写为:
void 函数(void){
      char a;
      ...
      
     //部分1
      a = ...;  //初始化a
      {         
          ... = a;  
          a = ...;
          ....
      }
      ....
      //部分n
      a = ...;  //初始化a
      {
          ... = a;
          a = ...;
          ...
      }
}
如果写成如下:
void hanshu(void){
      
     //部分1
      {         
          char a;
         
          ... = a;  
          a = ...;
          ....
      }
      ....
      //部分n
      {
          char a = ...;  //初始化a
         
          ... = a;
          a = ...;
          ...
      }
}
沙发
houcs|  楼主 | 2014-7-12 19:01 | 只看该作者
我感觉如第二种写砝比较容易读,很容易知道a的作用范围,而读第一种写法时还要考虑一下a的作用范围。所以俺认为第二种写砝比第一种写法好。大家认为这两种写法孰优孰劣呢?

使用特权

评论回复
板凳
liuzaiy| | 2014-7-12 19:04 | 只看该作者
似乎第二种好些,不过很少有人使用。

使用特权

评论回复
地板
yinxiangh| | 2014-7-12 19:04 | 只看该作者
不提倡用作用域区分同名变量吧

使用特权

评论回复
5
pangb| | 2014-7-12 19:05 | 只看该作者
除了for里的i, j, k

使用特权

评论回复
6
chenjunt| | 2014-7-12 19:05 | 只看该作者
楼上正解

使用特权

评论回复
7
kangzj| | 2014-7-12 19:07 | 只看该作者
第二种思路明确,这都是关于变量的作用域

使用特权

评论回复
8
小小猫咪| | 2014-7-12 19:11 | 只看该作者
短的函数无所谓,长的就该分成几个函数了!

使用特权

评论回复
9
zyf部长| | 2014-7-12 19:12 | 只看该作者
第2种方法得非常小心。

使用特权

评论回复
10
zyf部长| | 2014-7-12 19:12 | 只看该作者
至少我在VC中发现过严重错误。

使用特权

评论回复
11
zwll| | 2014-7-12 19:13 | 只看该作者
用第二种写法的话,在我们这里你可以走人了

使用特权

评论回复
12
chuxh| | 2014-7-12 19:13 | 只看该作者
要是在while里不就完了啊是不是啊

使用特权

评论回复
13
juventus9554| | 2014-7-12 19:14 | 只看该作者
第二种方式,后果灰常严重!

使用特权

评论回复
14
司徒老鹰| | 2014-7-12 19:14 | 只看该作者
第二种方法 如果放在长区域里面的话 几乎就不能区分这个a是属于哪个区域的,要翻很长的代码才能确定a的作用范围 ,会被人骂死的!

使用特权

评论回复
15
llljh| | 2014-7-12 19:15 | 只看该作者
最好还是用一看名字就明白的变量,不要依靠读代码才能明白

使用特权

评论回复
16
llljh| | 2014-7-12 19:15 | 只看该作者

简单变量只能用于约定成俗的变量,i,j,x,y这类

使用特权

评论回复
17
houcs|  楼主 | 2014-7-12 19:16 | 只看该作者
哦,这样啊,知道了

使用特权

评论回复
18
houcs|  楼主 | 2014-7-12 19:16 | 只看该作者
结贴了,呵呵,周末愉快

使用特权

评论回复
19
diweo| | 2014-7-12 20:43 | 只看该作者
有个编译器根本就不支持第二种方法,比如Keil for 51.
一般情况下也不会存在你说的情况,因为一般而言,函数都不超过20行。把多个功能混杂在一起编写成很长的函数,肯定是不好的习惯。

使用特权

评论回复
20
2545958269| | 2014-7-13 01:51 | 只看该作者
第二种有些编译器会认为是语法错误的,

而且那样写要清楚此变量的作用,一旦中途有任何改动,将带来灾难性的后果。

并且也不利于函数调用操作,比如中断处理时要明确此时的变量位置

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

743

主题

8382

帖子

5

粉丝