2010-07-05 17 views
12

En Visual C++, uno puede encontrar el archivo de cabecera en cualquier nombre (variable o tipo) es definido pulsando F12 en él o la elección de Ir a definición. Esta función es muy útil, pero solo muestra la ubicación final (archivo de encabezado) donde se define el nombre. ¿Hay alguna forma de averiguar la cadena de los archivos de encabezado que conducen desde mi archivo de origen al archivo de encabezado final para un nombre de pila?C/C++: ¿Cómo averiguar la cadena de archivos de encabezado para una definición dada?

Por ejemplo, considere este código:

// main.cpp  
#include <stddef.h> 
int main() 
{ 
    size_t s; 
    return 0; 
} 

En Visual C++ 2010, si miro hacia arriba la definición de size_t en el anterior main.cpp, me aterriza en algún archivo llamado sourceannotations.h. Sé que esta cadena de encabezado comienza con stddef.h (que he incluido) y termina en sourceannotations.h. ¿Cómo descubrir los enlaces en el medio de esta cadena?

+1

Si está buscando una tecla de acceso directo en Visual Studio (tm) o un complemento de Visual Studio (tm) Certified (r) para hacerlo, probablemente deba etiquetar su pregunta con una de Visual Studio (tm) relacionada tags ... –

+0

Pavel: No estaba buscando una tecla de acceso rápido. Pero, lo etiquetará con VS de todos modos ya que una solución así será útil también :-) –

Respuesta

12
  1. proyecto de clic derecho, "Propiedades del proyecto"
  2. "Propiedades de configuración" -> "C/C++" -> "Opciones avanzadas".
  3. Establezca "Mostrar incluye" en "Sí".

La jerarquía completa de encabezados se imprimirá en la ventana de salida cuando compila cada archivo.

+0

Esto funciona! No muestra la cadena de un cierto nombre, pero casi se adapta a mi necesidad. ¡Gracias! :-) –

+0

Para los curiosos, la cadena de encabezado para size_t en VC++ 2010 resultó ser: stddef.h -> crtdefs.h -> sal.h -> sourceannotations.h –

+1

@Ashwin: no obtendrá una copia exacta cadena de dependencias, porque el encabezado se puede incluir desde varios lugares. Lo que es peor, C++ permite typedefs duplicados del mismo tipo. Ahora tienes un árbol, en lugar de una cadena. –

1

Puede usar herramientas de ingeniería inversa como Doxygen, Understand Analyst, etc. Esto le ayudará a comprender el flujo completo de variables, llamadas a funciones.

+0

+1 para referirse a Comprender para C/C++, pero esto todavía requiere que abra el cuadro de incluir en Entendimiento y haga clic en abrir cada inclusión hasta encontraste el archivo de inclusión donde la variable/tipo/constante está realmente definida. Entonces, todavía hay mucho trabajo manual. Pero, por otro lado, de hecho muy buena utilidad. – Patrick

1

En su cuadro de diálogo de propiedades, en C/C++, Preprocesador, habilite Preprocesar a un archivo. Si compila main.cpp, esto generará main.i.

A continuación, puede buscar en main.i y ver qué archivo incluye qué otro archivo.

+0

Esa fue también mi idea inicial (utilizando la opción del compilador/P), pero a partir de ese archivo .i generado creo que todavía es difícil ver cuál es la 'cadena' real. – Patrick

Cuestiones relacionadas