2011-10-24 4 views
3

저는 C 전처리기를 사용하여 enum에 요소를 생성하고 있습니다. 생성 된 요소에 대해 doxygen 주석을 쓰는 방법이 있습니까? Doxygen 주석을 제거 할 것이기 때문에 doxygen 전에 전 처리기를 통해 실행할 수는 없습니다.Doxygen 주석 생성 된 코드

예 :

#define ATTRIBUTES \ 
X(TITLE, "title") \ 
X(FILENAME, "filename") \ 
X(GENRE_ID, "genre_id") 

enum ATTRIBUTES_ENUM { 
    #define X(a, b) a##_ATTRIBUTE, 
    ATTRIBUTES 
    #undef X 
    ATTRIBUTES_COUNT 
}; 

그리고 추가 뭔가 같은 :

/** 
* \def TITLE_ATTRIBUTE 
* The media's title. 
*/ 

이 작동하지 않습니다.

#define ATTRIBUTES \ 
X(TITLE, "title") /*!< title attribute */ \ 
X(FILENAME, "filename") /*!< filename attribute */ \ 
X(GENRE_ID, "genre_id") /*!< genre id attribute */ 

#define X(a, b) a##_ATTRIBUTE, 

enum ATTRIBUTES_ENUM { 
    ATTRIBUTES 
    ATTRIBUTES_COUNT 
}; 

#undef X 

을 그리고 매크로를 확장 Doxygen을 알려주기 : 토마스 매튜에

편집 감사합니다, 여기 내가 사용하는 솔루션입니다. 유일한 단점은 마지막 요소에 대한 주석이 ATTRIBUTES 정의에 대한 주석으로도 사용된다는 것입니다. 하지만 제 경우에는 사소한 문제입니다.

+0

## 연산자를 악용하여 // 토큰을 생성 할 수는 있지만 정의되지 않은 동작의 영역에있을 수 있습니다. 문제는 매크로가 확장되기 전에 번역 단계 3에서 주석이 삭제된다는 것입니다. –

답변

4

는 매크로를 처리하도록 지시는 Doxygen을 구성 파일에 다음

  1. 을보십시오. 매크로 정의에서
  2. , 각 구성원 후 Doxygen을 주석을 추가

    #define ATTRIBUTES \ 
    X(TITLE, "title") /**!< title element */ \ 
    X(FILENAME, "filename") /**!< file name element */ \ 
    X(GENRE_ID, "genre_id") /**!< title element */ 
    

인해 코드 formmatting 문제로, 각 행의 의견은 C의 유구 코멘트해야합니다.

제 생각에 Doxygen은 매크로를 처리 (대체)하고 수정 된 텍스트를 주석 엔진에 공급해야합니다.

다만 생각해보십시오.

열거 형을 텍스트로 변환하기위한 다른 스키마를 제안합니다. 배열, 벡터 또는지도를 사용하십시오. 예 :

enum Attributes_Enum 
{ 
    TITLE, FILENAME, GENRE 
}; 

struct Enum_Text_Entry 
{ 
    enum Attributes_Enum value; 
    const char * text; 
}; 

Enum_Text_Entry Enum_To_Text[] = 
{ 
    {TITLE, "title"}, 
    {FILENAME, "filename"}, 
    {GENRE, "genre"}, 
}; 

const unsigned int NUMBER_OF_ENTRIES = 
sizeof(Enum_To_Text)/sizeof(Enum_To_Text[0]); 

이제 테이블에서 열거 형을 검색하고 텍스트를 읽습니다. 열거 형 값과 텍스트를 함께 넣는 것이 좋은 이유는 열거 형 값을 변경할 수 있지만 나머지 코드는 변경하지 않아도된다는 것입니다.

+0

니스, 그 일했다! 나는 그걸 좀 가지고 놀고'#define'을'enum' 정의에서 옮겨야했습니다. 우리의 경우, 속성 목록을 통한 선형 검색은 엄격한 루프로 끝나기 때문에 바람직하지 않다고 생각했습니다. 그것은 좋은 지적입니다 - 이런 전처리기를 사용하는 것은 지저분한 일입니다. –

관련 문제