¿Alguien sabe la razón por la que las variables deben definirse en la parte superior de la función?

Tengo una pregunta, ¿alguien sabe por qué las variables deben definirse como inicializadas al comienzo de una función? ¿Por qué no puedes inicializar o definir variables en medio de una función en C como en C ++?

Esta es una tradición que proviene de los primeros comstackdores de C, cuando el comstackdor necesita todas las definiciones de variables locales antes de que se inicie el código real de la función (para generar el cálculo del puntero de la stack derecha). Esta fue la única forma de declarar las variables locales en el lenguaje C temprano, tanto en el estándar previo (K&R) como en el primer estándar C, C90, publicado en 1989-1990 (ANSI X3.159-1989, ISO / IEC 9899: 1990).

C99: la norma ISO de 1999 (ISO / IEC 9899: 1999) de C permite declaraciones en medio de la función.

C ++ permite esto porque es un lenguaje más nuevo que C. Los estándares de C ++ son ISO / IEC 14882: 1998 e ISO / IEC 14882: 2003, por lo que son de 1998 y 2003 años.

Puede inicializar la variable (asígnele un valor: a=4; ) en el punto de definición o en cualquier momento posterior.

Esto es algo que queda de principios de C. C99 permite que las variables se definan en cualquier parte de la función, incluidas las estructuras de bucle.

 for (int i = 0; i < 10; ++i) { int j; } 

El retroceso es de cuando los comstackdores necesitaban saber el tamaño de la stack para la función antes de que instanciaran el código de la función. A medida que los comstackdores mejoraban, el requisito se volvía molesto.

Puede hacer esto en C siempre y cuando use un comstackdor C99. La restricción fue levantada en C99.

Presumiblemente, la restricción originalmente estaba allí porque los comstackdores eran menos capaces, o quizás simplemente porque nadie pensó en permitir tal conveniencia para el progtwigdor.

Al responder una pregunta como esta, a veces vale la pena darle la vuelta. ¿Por qué los diseñadores originales de C lo han hecho de otra manera? ¡No tenían C ++ para guiarlos!

En C ++ y C99, puede definir variables en medio de una función. Lo que no puede hacer es referirse a una variable que aún no se ha definido.

Desde el punto de vista de la progtwigción orientada a objetos, no tendría mucho sentido de lo contrario: al definir una variable, se da vida a un objeto (se llama a su constructor). Antes de eso, no hay ningún objeto, así que no hay nada con lo que interactuar hasta que pase el punto de construcción del objeto.

Intente escribir un comstackdor con el poder primitivo de los viejos tiempos y se daría cuenta de que la flexibilidad es algo que preferiría matar para que el software funcione.

Poniendo primero las variables, luego otras declaraciones simplemente simplificaron el código del analizador / comstackdor.