2010-10-12 18 views
18

Utilizo archivos de etiqueta para code completion y para una vista rápida y en línea de parámetros, sobrecargas, archivos (donde esté declarado), etc. ¿Dónde puedo encontrar etiquetas de libre disponibilidad para C99, C++ 03 y C? ++ 0x bibliotecas estándar? (C89 sería mejor que nada, pero preferiría tener C99).Etiquetas de biblioteca estándar

Prefiero etiquetas sin crumble; p.ej. las implementaciones usan nombres reservados para los parámetros, así que en lugar de "std :: min (_M_a, _M_b)", prefiero ver "std :: min (a, b)". Este y otros problemas descartan generar desde implementaciones reales. Aunque supongo que algún postprocesamiento podría limpiarlos (especialmente el problema del identificador), casi parece que sería más fácil escribir desde cero.

+1

Cool. No tenía idea de que pudieras hacer esas cosas en vim. –

+0

Hablando de etiquetas, ¿no debería ser C++ 1x? ;) –

+6

@jus: No.⁠⁠⁠⁠⁠⁠ –

Respuesta

2

Para esos requisitos exactos es probable que tenga que crear los mismo :(

+2

Creo que tendré que morder la bala y hacer esto, pero espero que el trabajo pueda ser utilizado por otros. Ahora estoy a la mitad de C++ 03 stdlib y actualizaré la pregunta (para usted o cualquier otra persona interesada) en aproximadamente una semana con un enlace. (Oye, es en mi tiempo libre;) –

2

generan a sí mismo una biblioteca de etiquetas usando ctags en las cabeceras dir, como escrito en el blog que enlace en su pregunta

+4

Como dije, "esto descarta la generación de implementaciones reales". –

+0

@Roger Pate: Esto no es así. En realidad, tu única forma es generar desde la implementación. Y no veo ningún problema, generalmente las conversiones utilizadas son consistentes, por lo que es fácil escanear los identificadores reservados de implementación y convertirlos en algo más bonito. Los encabezados de MVS se ven como si * fueron * destruidos con una herramienta automática: alloc -> _Alloc etc ... – ybungalobill

+1

@ybungalobill: Me parece obvio que esta respuesta se escribió sin más lectura que la de robar la pregunta. Si he cometido un error en mis razones * por qué * generar desde implementaciones no funciona para mí, por favor, señálalas, pero esto definitivamente no responde mi pregunta. –

0

Ésta no es una respuesta completa. Alguien publicó un perl script to extract tags from SGI's STL documentation. No incluye nombres de parámetros de función. Ya que funciona en la documentación, no hay nada. Espero que esto ayude un poco.

+1

Los documentos STL de SGI difieren de la biblioteca estándar en muchos aspectos. –

5

Generalmente es difícil extraer etiquetas de libc porque las declaraciones de funciones probablemente se implementarán en los encabezados como macros complejas. Se puede usar nm para encontrar una lista de símbolos exportados por una biblioteca, pero eso no aborda la lista de parámetros.

Creo que la mejor solución a este problema consiste en analizar la documentación:

Aquí está una lista de todas las funciones y macros exportados por libc en un formato fácilmente analizada:

http://www.gnu.org/s/libc/manual/html_node/Function-Index.html#Function-Index

Cada enlaces de las funciones a una página que enumera los parámetros para esa función, también en un formato predecible:

http://www.gnu.org/s/libc/manual/html_node/Block-Input_002fOutput.html#index-fread-1010

Analizar las páginas es bastante fácil usando el módulo BeautifulSoup Python.

+0

¿Qué ocurre con la expansión de macros utilizando el preprocesador C? – sellibitze

+0

Eso sería una instalación ordenada para crear. Sería problemático porque podría ser muy difícil predecir los valores utilizados en '# if/# ifdef' que el compilador define en tiempo de ejecución. Tampoco permitiría la extracción de los parámetros utilizados en las macros que tienen parámetros variados (es decir, #define func (...)). –

+0

[Puede ver todas las macros predefinidas a través de los modificadores de línea de comandos con algunos compiladores.] (Http://stackoverflow.com/questions/75538/hidden-features-of-c/2339965#2339965) Doxygen hace algo similar al preprocesamiento , pero tiene varias opciones para controlar la granularidad. –

0

Si conseguir la finalización de las bibliotecas estándar es el tema principal, el clang vim plugin hace esto muy bien sin el uso de etiquetas en absoluto. No es, sin embargo, todavía algún parámetro "cruft" en las terminaciones, ya que utiliza los símbolos utilizados por el encabezado.

Usted simplemente deja caer un archivo en ~/.vim/plugin, instala clang, y funciona. Mucho más simple que la ruta omnicompleta . El único problema que he tenido hasta ahora en mi uso limitado es que a veces es lento con las terminaciones.

Cuestiones relacionadas