[bo][un]qfyzy[/un] 在 2008-9-12 12:46 的发言:[/bo]
我还可以说即使在UNIX下用CC编译,随便补变量是极其不良的习惯。不要尽量想办法去钻空子。
至于说节约空间,可损失的就是时间。所以我建议,除了极少数的变量,别的都在函数头声明的好。
我还可以说即使在UNIX下用CC编译,随便补变量是极其不良的习惯。不要尽量想办法去钻空子。
至于说节约空间,可损失的就是时间。所以我建议,除了极少数的变量,别的都在函数头声明的好。
1 凭什么说损失时间?知道变量的分配原理么?局部变量都是在栈上面分配的,而且C/C++编译器可以优化到在进入函数的时候一次分配所有变量。即使不会这么优化,增加一个局部变量也就就是ESP堆栈指针的值加一个字的长度而已。多了一条CPU指令你就无法忍受了?
2 变量随用随写,避免作用域问题,很多NOIPers都习惯在开头用全局变量或者函数开头定义循环变量,结果在内部复杂的过程中变量冲突。很难Debug,这一点我以前有深切体会。变量随用随定义不是偷懒,而是一种“封装”的思想。缩小错误的可能范围,提高代码强健度。
3 变量本身代表的是一种对程序执行“状态”的记录。那么全局变量则代表在整个程序中都有效,或者都必须使用的状态,而局部变量则代表只是在某个部分才会使用的状态。随用随写,可以使状态的定义和使用在一个狭小的范围有效,提高程序紧凑性和可维护性,利于Debug。代码逻辑也会很清晰。
4 可能有人担心,如果在中间定义的变量和后面定义的冲突了怎么办?一种办法是为一个单独功能写一个单独函数,如下:
int func(...)
{
int var;
//.....
}
int main()
{
func();
//.....
int var; //注意,仅在C++中写这样的代码!!
//.....
};
如果不喜欢这种方法,也可以把变量放到独立的块中去:
int main()
{
{
int var;
//..........
}
//.........
{
int var;
//.........
}
}
使用块分离功能,提高代码独立性,降低代码耦合。还能提醒程序员,在局部代码开始复杂的时候,及时将独立功能分离成函数。
当然,如果预先就设计好了整个函数的功能,或者函数的功能很简单,也可以将所有的变量声明放在函数头。我的建议是:
[bo]将在某个局部块(包括函数等独立块)使用的变量放在其局部代码开头,一切以清晰,封装,低耦合,易维护为先。[/bo]