2009-07-29 17 views
21

Estoy tratando de enseñarme C Programación y estoy usando DevC++ para mi IDE en Windows XP. Estoy un poco confundido sobre la forma correcta de llamar a mis propios archivos de encabezado.C Archivos de encabezado - Forma correcta de incluir

tengo mi archivo principal fuente llamada main.c y un archivo separado para las funciones de llamada myFunctions.c que incluyo en main.c usando 'incluyo 'myFunctions.h' con todos mis prototipos de las funciones que residen en esta cabecera archivo.

myFunctions.c contiene dos funciones una llamada showDate() y otra llamada showScreen() y ambas funciones se pueden llamar desde main.c todo bien y bien.

Mis problemas comenzaron cuando intenté llamar a showDate() desde dentro de showScreen() y durante la compilación/vinculación se quejaba porque no tenía un prototipo dentro de myFunctions.c para showDate().

Lo que quiero saber es ¿cuál de las siguientes cosas debo hacer?

  1. incluyen "myFunctions.h" dentro de myFunctions.c

  2. Declarar el prototipo en tanto myFunctions.h y myFunctions.c
  3. Declarar el prototipo en tan sólo myFunctions.c única

Todo lo anterior parece corregir el error del compilador y me permite llamar a la función bot desde main.c y dentro de myFunctions.c pero no puedo encontrar una fuente definitiva de cuál es el procedimiento correcto.

Respuesta

24

Use # 1 - #include en muchos lugares.

Nunca use # 2 - nunca declare nada más de una vez.

Rara vez use # 3 - declare algo en un archivo .c como si nunca fuera a reutilizarlo.

+6

Quizás considere la visibilidad antes de decidir entre # 1 y # 3. Use # 1 si necesita llamar a esta función desde otro archivo .c. Use # 3 si la función no es necesaria en ningún lugar fuera del archivo local. De esta manera se reduce el desorden en los archivos de encabezado y realmente se pueden usar como definición de interfaz. –

+4

Derecha. Las funciones que se invocan desde otro lugar deben estar en el archivo .h. Las funciones que son internas deben declararse estáticas y prototipadas en el archivo .c. Eso le da a C una modularidad muy necesaria. –

2

Debe elegir la opción 1. O bien, ordene myfunctions.c para que la definición de la función llamada ocurra antes que la función que la llama. Al incluir el encabezado en el archivo, permite que el compilador detecte cualquier desajuste entre la declaración y la definición.

7

El archivo de encabezado debe contener los prototipos. Luego lo incluye en todos los prototipos que se utilizan, incluido el archivo .c que contiene las definiciones de funciones.

BTW DecC++ ya no se está desarrollando activamente; en su lugar, debería considerar cambiarse a Code::Blocks.

+0

Gracias Neil, veré en Code :: Blocks un poco más tarde –

+1

Code :: Block is fantastic - lo primero que noté fue Code Folding, que era algo que realmente quería en DevC++ Cheers Neil! –

3

Definitivamente la primera opción.

1

Como todos los demás ya han dicho, debe usar la primera opción. La regla general es que los prototipos de funciones residen en archivos .h y sus implementaciones en archivos .c.

Cuestiones relacionadas