C 在函数开头声明变量有什么好处吗?
我知道C99之前的编译器需要在函数开始时声明变量来计算堆栈大小。然后取消了要求。如今,除了向后兼容之外,仍然坚持这个方案还有什么好处,或者仅仅在需要变量的时候声明变量,以及在需要更好的地方声明变量?(例如,在if语句中,一个分支需要变量,而另一个分支不需要)答案是否。在函数开头声明标识符不会带来编译或其他计算方面的好处 好的现代编译器分析代码中使用值的位置,因此声明的位置是无关的,只要它们不影响语义(例如将声明移动到复合语句中,缩小其范围)C 在函数开头声明变量有什么好处吗?,c,c99,C,C99,我知道C99之前的编译器需要在函数开始时声明变量来计算堆栈大小。然后取消了要求。如今,除了向后兼容之外,仍然坚持这个方案还有什么好处,或者仅仅在需要变量的时候声明变量,以及在需要更好的地方声明变量?(例如,在if语句中,一个分支需要变量,而另一个分支不需要)答案是否。在函数开头声明标识符不会带来编译或其他计算方面的好处 好的现代编译器分析代码中使用值的位置,因此声明的位置是无关的,只要它们不影响语义(例如将声明移动到复合语句中,缩小其范围) 在某些情况下,在函数或块的开头告诉读者您要做什么可能会
在某些情况下,在函数或块的开头告诉读者您要做什么可能会有好处。通常,在需要标识符的地方声明标识符是有益的,因为这会减少读者一次必须考虑的事情的数量。但是,如果函数将要执行的算法有某种模式或韵律以及原因,那么在开始时展示该算法的某些方面可以帮助读者理解它。答案是否定的。在函数开始时声明标识符不会带来编译或其他计算方面的好处 好的现代编译器分析代码中使用值的位置,因此声明的位置是无关的,只要它们不影响语义(例如将声明移动到复合语句中,缩小其范围)
在某些情况下,在函数或块的开头告诉读者您要做什么可能会有好处。通常,在需要标识符的地方声明标识符是有益的,因为这会减少读者一次必须考虑的事情的数量。但是,如果函数将要执行的算法有某种模式或韵律和原因,那么在开始时展示该算法的某些方面可以帮助读者理解它。C语言允许在任何语句块中声明至少从1978年开始的变量,如第4.8节块结构所述。这也在中进行了描述 最近的修订版除了允许在任何块的开头进行声明外,还允许稍后在块中放置声明,但不允许向前引用。数组的大小也可以动态定义,并且不限于常量表达式 是否有任何好处是谁的问题。我能想到有好处的原因:
- 更简单的函数可能无法从构建变量声明的额外设计工作中获益
- 具有局部作用域变量的函数可以在更高级别上隐藏声明
- 自动变量声明,其中包含需要在分配前进行检查的动态大小调整
- 代码读者可以在一个位置看到函数中引用的标识符,通常带有描述行为的注释,以及
- 从其他语言翻译而来但没有此功能的代码看起来更像原始代码
- 天真的编译器可以使用这些信息来改进堆栈帧分配,而无需进行静态分析(特别是使用大变量)
- mechanical代码生成器可以通过在较小范围内声明变量而避免名称空间冲突,并且
- 长函数通过避免在整个函数体中使用无效的值而受益于局部作用域
- 更简单的函数可能无法从构建变量声明的额外设计工作中获益
- 具有局部作用域变量的函数可以在更高级别上隐藏声明
- 自动变量声明,其中包含需要在分配前进行检查的动态大小调整
- 代码读者可以在一个位置看到函数中引用的标识符,通常带有描述行为的注释,以及
- 从其他语言翻译而来但没有此功能的代码看起来更像原始代码
- 天真的编译器可以使用这些信息来改进堆栈帧分配,而无需进行静态分析(特别是使用大变量)
- mechanical代码生成器可以通过在较小范围内声明变量而避免名称空间冲突,并且
- 长函数通过避免在整个函数体中使用无效的值而受益于局部作用域