2009-08-24 10 views
5

Si pongo un encabezado (ah) en stdafx.h y ese encabezado incluye otro encabezado (bh) que no se menciona en stdafx.h, se visitará cada vez que alguien incluya ah o ¿Está compilado como parte de ah? Si se compila en a.h, ¿qué sucede cuando alguien incluye b.h directamente? ¿Esto será precompilado o no?Pregunta sobre los encabezados precompilados en Visual C++

Mi motivación para hacer esta pregunta es que estoy tratando de optimizar el contenido de los archivos stdafx.h para el software en el que trabajo. Tanto la reconstrucción como los tiempos de construcción incrementales son importantes para nosotros. Me preguntaba si podría simplemente buscar en todos los archivos .cpp las directivas #include y contar el número de veces que se incluye cada archivo. Los archivos que se incluyeron a menudo podrían ser buenos candidatos para el archivo stdafx.h. Por supuesto, esta estrategia es completamente falsa si tengo que considerar no solo qué archivos están incluidos, sino también qué archivos incluyen los archivos incluidos.

dudo que importe, pero estamos utilizando Visual Studio 2005.

+0

VOGUE POR FAVOR PARA ESTO: http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/4931119-allow-precompiled-headers-to-be-shared-between-pro –

Respuesta

4

a.h y b.h será parte de encabezado precompilado, y no hay necesidad de incluir más adelante. Todo lo que necesita es incluir stdafx.h donde a.hob.h se requieren. Si va a incluir ah o bh explícitamente después de stdafx.h (todo el código anterior a stdafx.h include se ignora), no se compilará por segunda vez (solo porque generalmente están protegidos por la directiva #pragma once o define), pero el compilador abrirá ese archivo en el disco duro si está preguntando al respecto,

Por cierto, debe saber que puede usar varios archivos de encabezado precompilados (pero no más de uno en cada archivo cpp).

+3

Lo que dices sobre incluso ah o bh después de stdafx.h es técnicamente cierto - el compilador mirará los encabezados de nuevo - pero la mayoría de los encabezados usan #pragma una vez o incluyen guardias para evitar que esto suceda. De hecho, recomendaría incluir a.hy b.h en cualquier lugar que sean necesarios, incluso si a.h está en stdafx.h; de lo contrario, no podrá modificar el contenido de stdafx.h más tarde sin tener que ejecutar una lista interminable de errores de compilación. –

+0

Sí, no se compilarán, pero el compilador lo abrirá técnicamente. –

+1

Estoy de acuerdo en que la idea de Nick es útil, pero me temo que habrá un golpe de rendimiento, ya que necesitamos hacer IO de disco adicional para encontrar que hay #progma una vez –

Cuestiones relacionadas