¿Cuál es una buena manera de encontrar definiciones en los archivos de encabezado al usar gcc?

¿Alguien tiene una forma recomendada de encontrar definiciones en los archivos de encabezado al usar gcc? Al usar MSVC, puedo hacer clic derecho y seleccionar “Ir a la definición”, lo que es realmente bueno.

He usado netbeans + gcc, y tiene asistencia de código, incluido el hipervínculo a la definición, así que esa es una opción. Sin embargo, me gustaría saber si existen otros IDE con esa funcionalidad y también la mejor manera cuando no se utiliza un IDE.

Puede ejecutar Doxygen para generar un navegador de origen basado en HTML. Esto no requiere que el código se anote con la documentación de estilo Doxygen. Funciona para varios idiomas, incluidos C ++ , Java y Markdown (los archivos .md van a “Páginas relacionadas”).

Aquí hay una forma de configurar y lanzar Doxygen desde la línea de comandos (probado en Linux) …

 ## basic echo -e "SOURCE_BROWSER=YES\n EXTRACT_ALL=YES\n RECURSIVE=YES\n" |doxygen - xdg-open html/index.html 

o

 ## include diagrams and non-public content -- and launch browser immediately echo -e "HAVE_DOT=YES\n CALL_GRAPH=YES\n CALLER_GRAPH=YES\n SOURCE_BROWSER=YES\n EXTRACT_ALL=YES\n EXTRACT_PRIVATE=YES\n EXTRACT_STATIC=YES\n RECURSIVE=YES\n SEPARATE_MEMBER_PAGES=YES\n GENERATE_LATEX=NO\n EXCLUDE_SYMLINKS=YES" |doxygen - && chromium-browser --new-window html/index.html 

Hay un progtwig complementario llamado doxywizard que le permite navegar a través de las muchas opciones de configuración disponibles para personalizar el HTML generado. Alternativamente, puede ejecutar doxygen -g para crear un archivo de configuración inicial (que incluye sugerencias detalladas).

Recomiendo las siguientes opciones no predeterminadas para generar un navegador de origen:

 SOURCE_BROWSER=YES ## display source code EXTRACT_ALL=YES ## display all items (not just "documented" ones) RECURSIVE=YES ## include source found in subdirectories SEPARATE_MEMBER_PAGES=YES ## optional -- each class member has its own page 

Una vez que haya subido la página web principal, puede buscar la fuente de interés (o usar la función de búsqueda). La fuente tiene referencias cruzadas con enlaces a las declaraciones relevantes.


Me he encontrado con este problema varias veces: doxygen puede crear nombres de archivos realmente largos y el directorio de inicio encriptado de Linux tiene un límite de 143 caracteres . Para evitar esto, es posible que tenga que escribir la carpeta html fuera de su casa.

Una solución rápida y sucia es vincular html a una carpeta en /tmp o /dev/shm , tal vez también chmod los permisos para una mejor seguridad de los datos.

Pruebe CScope . Junto con el módulo xscope Emacs, puede decirle a Emacs que se Mx cscope-find-global-definition a Mx cscope-find-global-definition , que saltará al archivo en el que se define un símbolo. Muy práctico

Por supuesto, un IDE como Eclipse o KDevelop o Code :: Blocks también debería tener esa característica.

Eclipse CDT es independiente de la plataforma y tiene dicha característica (y más). Indexa todos los elementos incluidos que tiene en su proyecto (biblioteca + el suyo propio), de modo que puede encontrar una definición de cualquier statement (o, si es necesario, cualquier statement). Puede pensar en Eclipse como un editor de texto elegante orientado a C ++ con capacidades adicionales para lanzar make (nmake.exe o lo que sea) con su makefile. Utilizo los comstackdores Eclipse + MS cl.exe de WinSDK, funcionan como amuletos juntos. Ejecuto nmake.exe desde Eclipse, y Eclipse redirige la consola nmake.exe muy bien a una ventana IDE especial. También analiza la salida del comstackdor y resalta automáticamente las líneas ofensivas. Lo único que hay que hacer es configurar las variables de entorno para nmake.exe desde Eclipse.

cscope es una de mis herramientas favoritas para entender el código C, pero puede que no se traduzca bien en el mundo de Windows.

ctags exuberantes es una excelente herramienta para encontrar definiciones en docenas de idiomas. La mayoría de los editores de progtwigción razonables proporcionan alguna interfaz para llamar a ctags para obtener información de definición. ( vim , por ejemplo, le permite usar ^] para encontrar una definición de un símbolo y ^T para abrir la stack de definiciones. Usted construye una base de datos usando ctags -R . y busque definiciones usando su editor. (Por ejemplo, vim -t foo buscará la etiqueta foo en la ctags datos ctags y saltará a ese archivo y línea).

El paquete idutils GNU proporciona algunas utilidades agradables similares a ctags para encontrar usos de símbolos en una variedad de idiomas. La integración no es tan buena en la mayoría de los editores como ctags o cscope pero podría ser más fácil para usted escribir herramientas. Construyes la base de datos con mkid . y busque símbolos con gid foo o lid foo o búsquedas similares.

Encuentro que las tres herramientas proporcionan una funcionalidad lo suficientemente diferente que uso las tres comúnmente. ctags hace que la búsqueda de fonts en vim extremadamente rápida, cscope puede ayudar a encontrar personas que llaman y personas que llaman, y gid (especialmente gid -s ... ) es bueno para obtener algunas sugerencias sobre situaciones complejas que las otras herramientas no han resuelto. (Ni ctags ni cscope entienden bien el token pegado , pero gid -s me permite aproximarme a una solución).