No, no obviaría los archivos de encabezado. Eliminaría el requisito de usar un encabezado para declarar clases/funciones en el mismo archivo. La principal razón para los encabezados es no para declarar cosas en el mismo archivo. La razón principal para los encabezados es declarar cosas que están definidas en otros archivos.
Para bien o para mal, las reglas para la semántica de C (y C++) imponen el comportamiento de estilo de "paso único". Sólo por ejemplo, considere un código como éste:
int i;
int f() {
i = 1;
int i = 2;
}
Los i=1
asigna al mundial, no la definida en el interior de f()
. Esto se debe a que en el momento de la asignación, la definición local de i
aún no se ha visto, por lo que no se tiene en cuenta. Todavía podría seguir estas reglas con un compilador de dos pasos, pero hacerlo podría no ser trivial. No he comprobado sus especificaciones para saber con certeza, pero mi conjetura inmediata sería que Java y C# difieren de C y C++ a este respecto.
Editar: Desde que un comentario dijo que mi conjetura era incorrecta, hice un poco de comprobación. De acuerdo con la Referencia del lenguaje Java, §14.4.2, Java parece seguir bastante cercano a las mismas reglas que C++ (un poco diferente, pero no mucho.
Al menos mientras leía el C# language specification, (advertencia: archivo de Word) sin embargo, es diferente. (§3.7.1) dice: "El alcance de una variable local declarada en una declaración de variable local (§8.5.1) es el bloque en el que la declaración ocurre. "
Esto parece decir que en C#, la variable local debe ser visible en todo el entero bloque en el que se declara, por lo que con un código similar al ejemplo que di, el nombre nt sería a la variable local, no a la global.
lo tanto, mi suposición era mitad derecha: Java sigue (bastante much0 la misma regla como C++, en este sentido, pero C# no lo hace
El compilador de C++ leerá secuencialmente [es decir, que se lee de arriba a abajo. ...] Así es como funciona el lenguaje. Su sugerencia de "pasar" dos veces y observar los prototipos de la función funcionaría, pero desafortunadamente no es así como funciona el lenguaje. – Warty
Duplicado: http://stackoverflow.com/questions/752793 –
C como un lenguaje estandarizado hace más de 30 años, cuando la tecnología subyacente era mucho menos capaz y mucho más cara que las cosas de hoy. Una sugerencia suave: trate de aprender un poco sobre la historia de las cosas, y entienda que el mundo ha cambiado tremendamente desde aquellos Las decisiones se tomaron y continuarán cambiando después de tomar decisiones en sus esfuerzos de desarrollo. Alguien, algún día, * se preguntará "¡¿WTF ?!" acerca de sus decisiones ... ;-) – DaveE