Как я могу перейти к функционированию при разработке C на Emacs? - PullRequest
10 голосов
/ 09 февраля 2011

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

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

Ответы [ 4 ]

10 голосов
/ 09 февраля 2011

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

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

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

3 голосов
/ 10 февраля 2011

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

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

Кто-нибудь добился успеха в семантическом режиме ???

спасибо

3 голосов
/ 09 февраля 2011

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

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

0 голосов
/ 10 февраля 2011

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

...