Как я могу перейти к функции при разработке C в Emacs?

Я занимаюсь разработкой C в Emacs. Если у меня есть исходный файл, открытый с несколькими функциями, а "маркер" - при вызове функции, например. int n = get_number(arg); Можно ли каким-либо образом "перейти" к реализации этой функции? например до int get_number(int *arg) { ... }

Я проделал некоторую разработку Java в Eclipse и упустил эту функцию, потому что я не привык к Emacs, но я хотел бы узнать.

Ответ 1

Вам нужно создать файл тега.
В Unix у вас есть программа etags, которая понимает синтаксис C, C++, Java... и создает файл tag, который может использоваться Emacs.

Эта более старая страница (2004) содержит дополнительную информацию.

Чтобы перейти к функции, используйте M-. (thats Meta-Period) и введите имя функции. если ты просто нажмите enter. Emacs перейдет к объявлению функции, которое соответствует слову курсор.

Ответ 2

Существует несколько систем "тегов", которые позволяют это (есть один пакет с emacs, есть глобальный GNU, который не связан с emacs, но хорошо сочетается с ним и имеет некоторые преимущества). По сравнению с Eclipse вам нужно будет создать файл тегов.

Тогда существует семантический /EDE, который теперь связан с emacs, который должен предоставить решение без необходимости создания базы данных явно. Я не пытался использовать его в последнее время. Когда я это сделал, у меня была проблема с производительностью, и я обнаружил, что настроение было болезненным. (Возможно, из-за того, что я работаю над большим - несколько 10 миллионов строк - и старыми - некоторые вещи относятся к проекту середины 80-х годов без возможности его реорганизации).

Ответ 3

Я думаю, что семантический режим должен сделать то же самое. Хотя я не пытался переходить к другому файлу, но в одном файле он очень превосходный. Перейдите к переменной, произведите нажатие клавиши C-c , j, она перейдет к определению переменной. Вернитесь к предыдущей строке, используя C-u C-space. Чтобы отобразить ссылку на символ, используйте клавишу C-c , g

Это действительно помогает мне. Я не пробовал переходить к другому файлу, потому что мой текущий проект - это модифицированная программа Java, где мы используем препроцессор (нестандартный Java-процесс). Поэтому я думаю, что в этом проблема.

Любой успех с семантическим режимом

спасибо

Ответ 4

Мне очень нравится cscope для этого, но etags, вероятно, тоже работает.