2016-11-01 9 views
5

Пожалуйста, не возражает странность следующего минимального примера (я бы сделать гораздо больше, чтобы объяснить, почему я делаю вещи таким образом):Doxygen требует, чтобы включаемый-охранник быть документирован

тест файла. каст: ах

#include "a.h" 

int main() { 
    return 0; 
} 

Файл: ЬН

namespace N { // without namespace all is well! 
#include "b.h" 
} 

Файл:

/// \file 

#ifndef GUARD 
#define GUARD 

struct A {}; 
#define CMD 5 // without this, all is well! 

#endif 

Doxygen 1.8.11 жалуется:

warning: Member GUARD (macro definition) of file a.h is not documented. 

Первое интересное то, что предупреждение упоминает a.h. Во-вторых, если одна из прокомментированных строк удалена, предупреждение исчезает. Что здесь происходит?

+0

' В ах' нет охранников? –

+0

@old_mountain Только для минимальности примера. – AlwaysLearning

ответ

0

Вы можете использовать conditional documentation в suppress Doxygen предупреждения, как это:

//b.h 
/// \file 

//! @cond SuppressGuard 
#ifndef GUARD 
#define GUARD 
//! @endcond 

struct A {}; 
//! @cond SuppressCmd 
#define CMD 5 // without this, all is well! 
//! @endcond 

//! @cond SuppressGuard 
#endif 
//! @endcond 

Обратите внимание, что я обернутый #endif с cond с, потому что в противном случае вы получите, если-ENDIF предупреждение о несоответствии:

/home/user/doxygen/b.h:13: warning: More #endif's than #if's found. 
+0

Это обходное решение. Но что происходило? Почему предупреждение исчезло, когда я не определил «CMD»? – AlwaysLearning

Смежные вопросы