Стандарт ISO C описывает выход препроцессора в виде потока токенов предварительной обработки , а не текста.Комментарии не являются токенами предварительной обработки;они удаляются из входных данных до того, как произойдет токенизация.Поэтому в рамках стандартных возможностей языка принципиально невозможно, чтобы выходные данные предварительной обработки содержали комментарии или что-либо похожее на них.
В частности, рассмотрим
#define EMPTY
#define NOT_A_COMMENT_1(text) /EMPTY/EMPTY/ text
#define NOT_A_COMMENT_2(text) / / / text
NOT_A_COMMENT_1(word word word)
NOT_A_COMMENT_2(word word word)
После фазы перевода 4,и четвертая, и пятая строки, указанные выше, станут последовательностью из шести токенов
[/][/][/][word][word][word]
, где квадратные скобки обозначают границы токенов.Токена //
не существует, и поэтому вы ничего не можете сделать, чтобы препроцессор его создал.
Теперь стандарт ISO C не определяет поведение doxygen.Однако, если doxygen повторно использует препроцессор, поставляемый с чьим-то компилятором C, люди, написавшие этот препроцессор, вероятно, думали, что текстовый вывод препроцессора должен, прежде всего, быть точным отражением последовательности токенов, которую получит «собственно компилятор».Это означает, что он будет принудительно вставлять пробелы, где необходимо, чтобы отдельные токены оставались отдельными.Например, с test.c
приведенным выше примером,
$ gcc -E test.c
...
/ / / word word word
/ / / word word word
(я исключил некоторую нерелевантную болтовню выше интересующего нас результата.)
Если есть способ обойти этоВы, скорее всего, найдете его в руководстве по Doxygen.Например, могут быть параметры конфигурации, которые учат тому, что определенные макросы следует понимать как определяющие символы, и что это за символы, и какую документацию они должны иметь.