大家写函数时,函数内变量的声明是放在开头还是用到的时候

悟迟 2009-06-06 04:07:02
对于程序来说,两种情况,有没有区别
...全文
1042 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
mymtom 2009-06-06
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20090606/20/61ecc8df-2532-4a03-8ab7-947f1fed4596.html?seed=1018528102
mymtom 2009-06-06
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 AMxAmol 的回复:]
补充,这个和编译器有关,据我所知,大部分C++编译器都允许在用时申请,不过有些用于嵌入式芯片开发的C++编译器是规定必须在函数开始时定义局部变量,否则编译不过。

不过如果编译器允许,我喜欢用时才申请,可读性好些。而且由于作用域的关系,可以提前释放局部变量空间,降低内存消耗。
[/Quote]
如果在函数开始时定义局部变量,影响了可读性,一般认为函数太复杂,建议重新设计。
写单一功能的简单函数,而不功能多样的复杂函数。
AMxAmol 2009-06-06
  • 打赏
  • 举报
回复
补充,这个和编译器有关,据我所知,大部分C++编译器都允许在用时申请,不过有些用于嵌入式芯片开发的C++编译器是规定必须在函数开始时定义局部变量,否则编译不过。

不过如果编译器允许,我喜欢用时才申请,可读性好些。而且由于作用域的关系,可以提前释放局部变量空间,降低内存消耗。
mymtom 2009-06-06
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 pathuang68 的回复:]
引用 3 楼 Jalien 的回复:
没有区别。不过C++推荐在用到的时候才定义,这样可读性更强。


区别其实还是有一点的。


C/C++ code
// 开头处
SOMECLASS sc;
......
......
sc.SOMEMETHOD();





C/C++ code
// 使用处
......
......
SOMECLASS sc;
sc.SOMEMETHOD();




如果是开头处声明和定义变量或者对象的话,那么sc声明周期开始得就比较早,也就是说它会比较早地占用内存空间…
[/Quote]
这恐怕是实现相关的
请调查一下编译后的汇编代码再说。
pathuang68 2009-06-06
  • 打赏
  • 举报
回复
16楼更正:
声明周期 = 生命周期
mymtom 2009-06-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 wozhaolala 的帖子:]
对于程序来说,两种情况,有没有区别
[/Quote]
记得有个牛人说过“程序首先是给人看的,然后才是让机器去运行”。
说的好啊,以人为本,很和谐。
pathuang68 2009-06-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Jalien 的回复:]
没有区别。不过C++推荐在用到的时候才定义,这样可读性更强。
[/Quote]
区别其实还是有一点的。


// 开头处
SOMECLASS sc;
......
......
sc.SOMEMETHOD();



// 使用处
......
......
SOMECLASS sc;
sc.SOMEMETHOD();


如果是开头处声明和定义变量或者对象的话,那么sc声明周期开始得就比较早,也就是说它会比较早地占用内存空间,而又无所事事,从sc的声明周期开始到真正被使用这段时间内,sc所占用的空间实际上就是被浪费的内存空间。

如果需要使用的时候才声明和定义对象,则不存在上面的空间浪费问题。
mymtom 2009-06-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 youzhipeng 的回复:]
大家各有各的理解,精辟!
C++编程规范,讲究什么时候用,就什么时候声明。
但有个游戏引擎的脚本系统,规定放在函数最前面统统声明,否则编译就不过。真Shit.
[/Quote]
这是很有道理的,坚持这样做,你绝对不会后悔。

建议看看:
http://cvsweb.netbsd.org/bsdweb.cgi/src/share/misc/style?rev=1.45&content-type=text/x-cvsweb-markup
http://www.research.att.com/~bs/bs_faq2.html#coding-standard
NirvanaVirus 2009-06-06
  • 打赏
  • 举报
回复
用到的时候,在函数里~
GoonYangXiaofang 2009-06-06
  • 打赏
  • 举报
回复
用的时候, 作用域。
mymtom 2009-06-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fibbery 的回复:]
C++,一般放在需要的时候;
C,只能放在开头
[/Quote]
真的吗?

$ touch love.c && cat love.c && make love && ./love
#include <stdio.h>

int
main(void)
{
int i;

i = 1;
printf("%d\n", i);
{
int i;
i++;
printf("%d\n", i);
}
printf("%d\n", i);

return (0);
}
cc -std=c89 -pedantic love.c -o love
1
4195527
1
youzhipeng 2009-06-06
  • 打赏
  • 举报
回复
大家各有各的理解,精辟!
C++编程规范,讲究什么时候用,就什么时候声明。
但有个游戏引擎的脚本系统,规定放在函数最前面统统声明,否则编译就不过。真Shit.
xiangjiantui 2009-06-06
  • 打赏
  • 举报
回复
习惯,写在用的时候写。。以后维护程序也好维护
fairchild811 2009-06-06
  • 打赏
  • 举报
回复
个人习惯,只要编译,运行没问题就ok了.

不过最好用之前声明,这样程序可读性强一点
  • 打赏
  • 举报
回复
放在那里牵涉到构造位置。
还是随用随声明
中才德创 2009-06-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Jalien 的回复:]
没有区别。不过C++推荐在用到的时候才定义,这样可读性更强。
[/Quote]认同!
fibbery 2009-06-06
  • 打赏
  • 举报
回复
C++,一般放在需要的时候;
C,只能放在开头
lori227 2009-06-06
  • 打赏
  • 举报
回复
用到的时候, 这样比较容易找到定义的地方,因为离得近!!
majun01 2009-06-06
  • 打赏
  • 举报
回复
up
Jalien 2009-06-06
  • 打赏
  • 举报
回复
没有区别。不过C++推荐在用到的时候才定义,这样可读性更强。
加载更多回复(1)

65,179

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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