# line и перейти к строке - PullRequest
       31

# line и перейти к строке

2 голосов
/ 09 сентября 2008

Уважают ли какие-либо редакторы директивы C #line относительно функций goto line?

Контекст: Я работаю над генератором кода и мне нужно перейти к строке вывода, но строка указана относительно директив #line, которые я добавляю. Я могу отбросить их, но потом найти строку ввода будет еще хуже

Ответы [ 4 ]

2 голосов
/ 18 сентября 2008

Если редактор поддерживает сценарии, то должна быть возможность написать сценарий для навигации. Может даже существовать сценарий Vim или Emacs, который уже делает нечто подобное.

FWIW, когда я писал много Bison / Flexx, я написал макрос сценария Zeus Lua, который пытался сделать что-то подобное (т. Е. Перейти от входного файла к соответствующей строке выходного файла путем поиска # line marker).

Для любого, кого это может заинтересовать вот этот конкретный макрос-скрипт.

0 голосов
/ 19 сентября 2008

Используйте sed или аналогичный инструмент для перевода #lines во что-то еще, что не интерпретируется компилятором, так что вы получите сообщения об ошибках C в реальной строке, но у вас есть ссылка на оригинальный входной файл поблизости.

0 голосов
/ 09 сентября 2008

В заголовочном файле я иногда использовал следующее для создания интерактивных элементов в окно выхода компилятора VC6 и последних версий VS (2003+).

По сути, это использует тот факт, что элементы выводятся в выводе компилятора по сути анализируются на предмет "PATH (LINENUM): message".

Предполагается, что компилятор Microsoft трактует "pragma remind".

Это не совсем то, что вы спросили ... но в целом это может быть полезно придя к чему-либо, вы можете заставить компилятор выдавать, что некоторые редакторы могут соблюдать.

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

Я давно не пробовал, но все равно должно работать.

0 голосов
/ 09 сентября 2008
Директивы

#line обычно вставляются прекомпилятором, а не в исходный код, поэтому редакторы обычно не будут соблюдать это, если расширение файла .c.

Однако обычное расширение файла для посткомпилированных файлов - .i или .gch, поэтому вы можете попробовать использовать это и посмотреть, что произойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...