2012-03-25 7 views
5

he terminado de poner muchas pequeñas funciones en línea en un archivo de cabecera que incluyo en muchas unidades de compilación, el código está correctamente insertado por el compilador y el programa funciona como un amuleto.encabezado lleno de funciones en línea, ¿puedo mover el código fuera del archivo de encabezado y todavía en línea todo?

pero ahora el archivo de cabecera es algo muy inusual (por ser un archivo de cabecera), para que sea más fácil de leer que pensé que hacer algo como esto:

#ifndef MY_HEADER_H 
#define MU_HEADER_H 

static inline 
void my_fnct (my_param a); 

#include "my_header.inline.c" 

#endif 

y el archivo my_header.inline.c será como:

static inline 
void my_fnct (my_param a) 
{ 
    // .. my code .. 
} 

luego, cuando quiero estas funciones solo incluyo el archivo de encabezado.

mi pregunta es: ¿hay una manera mejor de lograr esto sin llenar un archivo de cabecera con demasiado código? o puedo hacer esto y espero que otros desarrolladores entiendan este código sin problemas?

+1

¿Cuál es el problema de tener funciones en línea en el encabezado, de nuevo? las funciones en línea deberían ser muy cortas, de una sola línea, realmente. – littleadv

+1

En cuanto al rendimiento del código, lo único que puede ver si esto es importante es medirlo. ¿Cuál es la ralentización de tu compilador con todas las cosas incluidas? Mi experiencia es que tales cosas son insignificantes con los compiladores modernos. Y no vale la pena tener cientos de opciones de configuración que puedes confundir fácilmente. –

Respuesta

1

No, no puedes. Sin embargo, puede usar la función de optimización de tiempo de enlace de GCC (algunas llamadas pueden estar en línea, incluso si la función no está declarada inline y no está disponible en encabezados para cada unidad de compilación), p. compile y enlace con gcc -flto (esto requiere un compilador GCC reciente, por ejemplo 4.6 al menos y ralentiza el tiempo de compilación).

1

Una práctica que personalmente no me gusta es extraer funciones en línea en un archivo separado con la extensión .inl. Esto es solo una convención y puede asignarle un nombre al archivo que desee. Tengo un IDE que dobla el código así que puedo ocultar las cosas que no quiero ver en lugar de tener un archivo separado.

Cuestiones relacionadas