Pregunta

¿Algún editor respeta las directivas de C #line con respecto a las funciones de ir a línea?

Contexto:Estoy trabajando en un generador de código y necesito saltar a una línea de salida, pero la línea está especificada en relación con las directivas #line que estoy agregando.Puedo soltarlos, pero luego encontrar la línea de entrada es aún peor.

¿Fue útil?

Solución

Si el editor admite secuencias de comandos, debería ser posible escribir una secuencia de comandos para realizar la navegación.Incluso podría haber un script de Vim o Emacs que ya haga algo similar.

FWIW, cuando escribía mucho sobre Bison/Flexx, escribí un Zeus Macro script de Lua que intentó hacer algo similar (es decir,pasar del archivo de entrada a la línea correspondiente del archivo de salida buscando el marcador #line).

Para cualquiera que pueda estar interesado aquí está ese macro script en particular.

Otros consejos

#line Las directivas normalmente son insertadas por el precompilador, no en el código fuente, por lo que los editores generalmente no respetarán eso si la extensión del archivo es .c.

Sin embargo, la extensión de archivo normal para archivos postcompilados es .i o .gch, entonces puedes intentar usarlo y ver qué sucede.

He usado lo siguiente en un archivo de encabezado ocasionalmente para producir elementos haciendo clic en la ventana del compilador VC6 y VS (2003+) Optut.

Básicamente, esto explota el hecho de que la salida de los elementos en la salida del compilador se está analizando esencialmente para "ruta (lino):mensaje".

Esto se basa en el tratamiento que da el compilador de Microsoft al "recuerdo de pragma".

Esto no es exactamente lo que preguntaste...Pero en general podría ser útil para llegar a algo que puede hacer que el compilador emita que algunos editores podrían honrar.

    // The following definitions will allow you to insert
    // clickable items in the output stream of the Microsoft compiler.
    // The error and warning variants will be reported by the
    // IDE as actual warnings and errors... which means you can make
    // them occur in the task list.

    // In theory, the coding standards could be checked to some extent
    // in this way and reminders that show up as warnings or even
    // errors inserted...


    #define strify0(X) #X
    #define strify(X) strify0(X)
    #define remind(S) message(__FILE__ "(" strify( __LINE__ ) ") : " S)

    // example usage
    #pragma remind("warning:  fake warning")
    #pragma remind("error:  fake error")

Hace tiempo que no lo pruebo pero aún así debería funcionar.

Utilice sed o una herramienta similar para traducir las #líneas a otra cosa que no interprete el compilador, de modo que obtenga mensajes de error de C en la línea real, pero tenga cerca una referencia al archivo de entrada original.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top