Prototipo de función declarado dentro de las principales – ¿mejores prácticas?

¿Es este un buen estilo para que la función prototipo se declare dentro de la función principal?

Estaba mirando un tutorial de C, creo que está bastante desactualizado. Sin embargo, declaran la función prototipo dentro de main. Normalmente declaro fuera antes de principal.

#include  int main () { char myname [30]; int theage; int getage (); printf ("\nEnter your name:"); gets (myname); theage = getage (); printf("\n AGE = %d and NAME = %s", theage, myname); return 0; } int getage () { int myage; /* local to only getage() */ printf ("\nEnter your age: "); scanf ("%d",&myage); return (myage); } 

Personalmente diría “no” por varias razones:

  • Hace que el código para main sea más largo.
  • puede confundir a un novato en pensar que la función está dentro del scope de main
  • en código real, normalmente pondría la función en una unidad de comstackción diferente y #incluiría su archivo de encabezado

También diré que no con la razón adicional de que si comienza a usar declaraciones explícitas en todo el código, definitivamente obtendrá elementos externos sin resolver cuando la función a la que llama de repente cambie su firma. Si tiene UNA statement en UN archivo de encabezado, solo necesita cambiar UNA statement cuando la función cambia.

Sin embargo, diría que sí debido a la siguiente razón: si está escribiendo un método de prueba simple que está escrito para un solo uso, es decir, si desea probar algo realmente rápido y luego descartar la función de inmediato. Entonces puede ser ingenioso simplemente lanzar una statement justo antes de hacer la llamada.

Para código de producción -> No no no! 🙂

No es un buen estilo.

Declare los prototipos de funciones locales al principio o muévalos a un archivo de encabezado.

Los protoypes de función (y las variables externas también) se pueden declarar en casi todas partes en el lenguaje c. Sin embargo, solo porque es posible, no debería haber ninguna razón para escribir el estilo C de los espaguetis.

Hace que el código sea menos legible. Para mí, tales prácticas son una clara señal de olor a código.

Creo que es solo un pequeño ejemplo del tutorial … esto es lo que haces cuando empiezas a introducir funciones …

Estoy de acuerdo con Neil …

Como no he saltado a través del número requerido de aros en este show de pony, no tengo más remedio que publicar este comentario como respuesta.

Tenga en cuenta que esto es solo un fragmento de un libro y no el tipo de código que se ve en un entorno de producción. El fragmento de código está bien pero no es ideal. Neil dio la mejor respuesta, así que le di +1. Notaría su tercer punto si realmente quiere saber cómo se hace fuera de los tutoriales / libros de texto.

Además, un punto desde que los estoy creando: el “stdio.h” vs es simplemente una forma de decirle al preprocesador dónde buscar el archivo stdio.h. Nuevamente, en la mayoría de las situaciones verá stdio.h rodeado por <> en lugar de “”. Sin embargo, sus propios archivos de encabezado, como se menciona en el tercer punto de Neil, estarán rodeados por “”.