在函数内修改由值'传递的参数并将它们用作局部变量

Jay*_*Jay 11 c parameters function

我已经看到了一些代码,其中通过值传递给函数的参数被修改或分配了一个新值,并且被用作局部变量.

这样做好吗?这样做是否存在任何陷阱,或者这样编码是否可以?

Unc*_*leO 9

本质上,函数的参数是局部变量,因此这种做法原则上并不坏.

另一方面,这样做可能会导致维护问题.如果另一个程序员稍后出现,他可能希望变量保持传入的值,并且更改将导致错误.

重用变量的一个理由是误导了内存使用效率的概念.实际上,它无法提高效率,并且可以降低效率.原因是编译器可以自动检测在两个不同的时间对两个不同的变量使用相同的寄存器是否有用,并且如果它更好则会这样做.但是程序员不应该为编译器做出决定.这将限制编译器可以做出的选择.

最安全的做法是在需要新值时使用新变量,并依赖编译器使其变得高效.

  • 从编译器的角度来看,对现有变量的每个赋值都可以视为一个新变量.因此,无论程序员是否创建了新变量,编译器都可以使代码同样有效.事实上,大多数微体系结构都有注册重命名,因此编译器甚至不必费心. (4认同)