Domanda

Qualche editor rispetta le direttive C #line per quanto riguarda le funzionalità goto line?

Contesto:Sto lavorando su un generatore di codice e devo passare a una riga dell'output ma la riga è specificata in relazione alle direttive #line che sto aggiungendo.Posso lasciarli cadere ma trovare la linea di input è ancora più doloroso

È stato utile?

Soluzione

Se l'editor è scriptabile, dovrebbe essere possibile scrivere uno script per eseguire la navigazione.Potrebbe anche esserci uno script Vim o Emacs che fa già qualcosa di simile.

FWIW quando scrivo molto di Bison/Flexx ho scritto a Zeus Script macro Lua che ha tentato di fare qualcosa di simile (ad es.spostarsi dal file di input alla riga corrispondente del file di output cercando il contrassegno #line).

Per chiunque possa essere interessato qui è quel particolare script macro.

Altri suggerimenti

#line le direttive vengono normalmente inserite dal precompilatore, non nel codice sorgente, quindi gli editor di solito non lo rispettano se l'estensione del file è .c.

Tuttavia, la normale estensione dei file post-compilati è .i O .gch, quindi potresti provare a usarlo e vedere cosa succede.

Ho usato occasionalmente quanto segue in un file di intestazione per produrre elementi cliccabili nella finestra del compilatore VC6 e recente vs (2003+).

Fondamentalmente, questo sfrutta il fatto che gli elementi che emettono nell'output del compilatore siano essenzialmente analizzati per "percorso (linenum):Messaggio".

Ciò presuppone il trattamento del "promemoria pragma" da parte del compilatore Microsoft.

Non è proprio quello che hai chiesto...Ma potrebbe essere generalmente utile per arrivare a qualcosa che puoi far emettere il compilatore che alcuni editori potrebbero onorare.

    // 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")

È da un po' che non lo provo ma dovrebbe funzionare ancora.

Usa sed o uno strumento simile per tradurre le #linee in qualcos'altro non interpretato dal compilatore, in modo da ottenere messaggi di errore C sulla riga reale, ma avere un riferimento al file di input originale nelle vicinanze.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top