Вопрос

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

Это предполагает обработку компилятором 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")

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top