2010-11-19 9 views
6

Me acabo de ocurrir una idea para resolver un problema y quería compartirlo. Lo siento si es demasiado banal.Idea para resolver inclusiones implícitas en C, C++

Por lo tanto, un gran proyecto de C++ que estoy revisando, contiene muchos incluye que se basa en símbolos de otros incluye, pero que no incluyen los necesarios. Cualquier ligero cambio en el procedimiento de compilación resulta en fallas de "símbolos faltantes".

De modo que para verificar todos incluye autocontención a la vez, busco todos * .h, creo sobre la marcha un archivo cpp que solo contiene #include -statement con este archivo .h e intento compilar eso. Al final, obtengo una lista de archivos de inclusión "buenos" y "malos". Genial, ¿verdad? :-) ¿O existe una solución más fácil para hacerlo?

+2

¿No los detectaría también si activara las advertencias de declaración implícita y tratara las advertencias como errores en las opciones de compilación? – tdammers

+2

-1: Claro, buena idea, pero esta no es una pregunta real. –

+1

@Andres: Sr. Question Policeman, esta es una pregunta, y pregunta si hay mejores formas de lograr lo mismo –

Respuesta

12

Si cada archivo .cpp incluye primero su propio archivo de encabezado y luego otros encabezados, obtendrá este control sin usar herramientas externas.

Esto es en realidad parte de Googles C++ Style Guide por la misma razón:

El orden preferido reduce ocultos dependencias. Queremos que cada archivo de encabezado sea compilable por sí mismo. La forma más fácil de lograr esto es hacer seguro que cada uno de ellos es el primer archivo .h #incluido en algunos .cc.

Si tiene archivos de encabezado que no tienen un archivo .cpp correspondiente, tendría que hacer algo especial para ellos.

+0

+1 ¡Gracias! Siempre uso este enfoque de inclusión, pero no recuerdo ni argumento los motivos. ¡Ahora sé! ¡Gracias también por señalar las guías de estilo de google! –

+1

Desafortunadamente no puede usar encabezados precompilados con este estilo: \ – Inverse

+0

@Inverso: ¡interesante! Nunca los he usado de todos modos, qué lástima :-( –

1

Ha sido un buen número de años, pero creo que Lint hace esto por usted. Y parece recordar que Lint también le dice cuándo se incluye un archivo cuando lo haría una declaración directa.

+0

Ok, gracias! En este código de cliente, incluso he visto muchos pragmas de pelusa. Debería preguntarles cómo lidian con esta advertencia de pelusa. Probablemente suprimida:) –

+1

Recuerdo habilitar todas las advertencias en Lint 'para reírse'. 1,2 millones de errores y se tomó la mayor parte del fin de semana para correr. Es mejor apagar todas las advertencias y encenderlas lentamente, arreglar lo que necesita y luego pasar al siguiente. Solo me interesaron 15 o más. –

Cuestiones relacionadas