这是一个来自早期C编译器的传统,当编译器在实际的函数代码开始之前需要所有局部变量定义时(生成正确的堆栈指针计算).这是在早期C语言中声明局部变量的唯一方法,早期标准(K&R)和第一C标准C90,发表于1989-1990(ANSI X3.159-1989,ISO/IEC 9899:1990).
C99 - C的1999年ISO标准(ISO/IEC 9899:1999)允许在函数中间进行声明.
C++允许这样做,因为它是比C.更新的语言.C++标准是ISO/IEC 14882:1998和ISO/IEC 14882:2003,因此它们是1998年和2003年.
您可以a=4;在定义点或稍后的任何时间初始化变量(给它一个值:).
这是早期C的遗留物.C99允许在函数的任何地方定义变量,包括循环结构.
for (int i = 0; i < 10; ++i) { int j; }
Run Code Online (Sandbox Code Playgroud)
回滚是从编译器在实例化函数代码之前需要知道函数堆栈大小的时候开始的.随着编译器变得更好,需求变得烦人.