Обработка двух разных функций с одинаковым именем в Doxygen - PullRequest
6 голосов
/ 03 марта 2012

У меня есть проект C, который содержит две функции с одинаковыми именами, но каждая из них находится в отдельной группе / модуле (@defgroup).

Каждая из этих функций компилируется в отдельный двоичный файл, но мне нужнодокументация должна иметь тесные перекрестные ссылки, поэтому мне нужно сослаться (@ref) на эти функции (среди других мест) из модуля друг друга.

Когда я делаю простой @ref name-of-the-function, он всегда ссылается натот, который находится в файле, который находится ранее в дереве файлов.Как я могу связаться с другим?

Ответы [ 3 ]

2 голосов
/ 13 января 2016

Насколько я вижу: автосвязь doxygen не поддерживает наличие нескольких функций с одинаковым именем.

Если существует несколько функций / методов с одинаковым именем, doxygen простосвязать первый найденный, как описано в вопросе.Графики вызовов также будут неверными.Похоже, это относится ко всем языкам, а не только к C.

Это неоднократно сообщалось как ошибка:

Раздел "Известные проблемы" в документации doxygenописывает аналогичную проблему:

Невозможно вставить функцию, не являющуюся членом f, в класс A с помощью команды \ related или \ relatedalso, если в классе A уже есть член с именем f итот же список аргументов.


Есть некоторая надежда;кто-то предложил патч для лучшей обработки функций с тем же именем: 656694 - getDefs не может разрешить локальные имена функций, если существует одно и то же глобальное имя .

Этот патч реализует следующие две стратегиидля разрешения дублированных имен.Во-первых, если имя определено в текущем файле, используйте локальное имя.Во-вторых, попытайтесь сопоставить имена, используя определение прототипа.

Это частично решит проблему.К сожалению, с 2012 года билет не был активен ...

1 голос
/ 18 августа 2017

Решение, которое работает для меня в doxygen 1.8.13, заключается в предоставлении явной ссылки с тегом HTML <a></a>. Например, у меня есть функция QF_run(), которая определена в трех разных файлах qv.c, qk.c и qxk.c. Вот три ссылки на эти три определения:

<a href="qv_8c.html#a779a1bc9482e2d489dc87751cd100fdb"><b>QF_run()</b></a>
<a href="qk_8c.html#a779a1bc9482e2d489dc87751cd100fdb"><b>QF_run()</b></a>
<a href="qxk_8c.html#a779a1bc9482e2d489dc87751cd100fdb"><b>QF_run()</b></a>

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

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

1 голос
/ 03 марта 2012

может ли это работать на вас?

Пример разбит на два файла ac и bc , только с одной функцией (конфликтующей).

file ac

/**
 * \defgroup agroup Group A
 */

/** 
 * the function in a, 
 * see also \link b.c myfunc() \endlink the other one 
 * \ingroup agroup
 */
void myfunc() {
    ;
}

файл bc

/**
 * \defgroup bgroup Group B
 */

/** 
 * the function in b, 
 * see also \link a.c myfunc() \endlink the other one 
 * \ingroup bgroup
 */
void myfunc() {
    ;
}

Как видите, myfunc() имеет конфликт имен.Я поместил ссылку на прочую функцию в документации.

Я включил имя функции в имя файла .

Я скомпилировал его с doxygen , и ссылки работали (они связывались из каждой документации функции с другой функцией).

...