2010-09-17 14 views
4

Dire que j'ai:Comment avoir des macros développées par doxygen, mais pas documentées en tant que définition?

#define MY_MACRO(FOO) void FOO(); 

MY_MACRO(hi); 
MY_MACRO(hey); 
MY_MACRO(hello); 

#undef MY_MACRO 

Je veux que les macros soient étendues par doxygen, que je suis capable de faire en configurant la bonne façon:

ENABLE_PREPROCESSING = YES 
MACRO_EXPANSION  = YES 
EXPAND_ONLY_PREDEF  = YES 
EXPAND_AS_DEFINED  = MY_MACRO 

Cela me permet de voir ELARGI résultat des macros en tant qu'API documentées dans la sortie doxygen (fonctions hi, hey et hello). Tout cela est bon pour le moment. Mais le problème est que doxygen documente également MY_MACRO comme une définition. Cependant, je ne veux pas que les clients de l'API soient au courant de MY_MACRO, car il n'est pas déformé et n'est pas utilisable par eux, et ne devrait pas être visible pour eux. J'ai EXTRACT_ALL = YES dans ma configuration doxygen et je ne veux pas changer cela. J'ai essayé la configuration suivante sans succès:

PREDEFINED  = DOXYGEN_SKIP_FOR_USERS 

Avec le code suivant:

#ifndef DOXYGEN_SKIP_FOR_USERS 
#define MY_MACRO(FOO) void FOO(); 
#endif /*DOXYGEN_SKIP_FOR_USERS*/ 

MY_MACRO(hi); 
MY_MACRO(hey); 
MY_MACRO(hello); 

#undef MY_MACRO 

Ce cache la documentation de la définir, mais bien sûr, empêche l'expansion, donc je ne comprends pas les fonctions documenté dans l'API générée.

J'apprécierais votre aide.

Répondre

6

Supposant que MY_ est le préfixe que vous utilisez régulièrement dans votre code :) J'utiliser le préfixe MY__ (deux underscores) pour les macros internes et mettre quelque chose comme

EXCLUDE_SYMBOLS  = MY__* 

dans le fichier de configuration Doxygen . Le trait de soulignement double à l'intérieur des symboles est réservé pour C++ (pas pour C). Donc, si vous voulez être compatible avec C et C++, vous devriez choisir un autre type de convention. Malheureusement, un trait de soulignement principal est également réservé, donc _MY_ ne ferait pas non plus.

+1

Remarque sur le double trait de soulignement: les noms contenant un trait de soulignement double sont réservés à l'usage du compilateur. Pour éviter de marcher sur les autres orteils, il est préférable d'éviter d'utiliser un double trait de soulignement dans vos propres identifiants. –

+0

@Bart Avez-vous une citation à portée de main? Je pensais que c'était seulement des identifiants commençant par un double trait de soulignement. (Et les identificateurs globaux commençant par un trait de soulignement, etc.) – llasram

+0

@Bart et @llasram: Je pense que cette règle de double trait de soulignement est une règle C++, pas pour C. (Je n'ai pas remarqué le drapeau C++). Mais en tout cas pour le but dont nous parlons ici, on peut facilement trouver juste un autre préfixe, pas trop méchant. –