2010-08-26 3 views
2

Veuillez partager avec nous votre macro PRINT ou DEBUG préférée, et la plus générale, applicable à toutes (ou presque toutes) les variables de différents types et aux tableaux en C. la macro peut avoir n'importe quel nombre de paramètres (bien que 1-3 soient préférés); Si elle augmente la puissance descriptive, les caractéristiques C99 peuvent être supposées.Votre macro C la plus générale pour l'impression de valeurs variables de différents types

#define PRINT(var, ...) \ 
    ... 

Commençons!

+0

Est-ce un concours ou quoi? Où est la question? –

+0

Vous collez votre propre macro PRINT qui, étant donné une variable et peut-être un format de chaîne et d'autres informations nécessaires, stringifie la valeur de la variable et l'imprime. – OTZ

Répondre

1

Pour C++, la fonction de modèle peut être beaucoup plus puissante que la macro.

template <typename T> 
std::string tostring(const T& t); 

L'inconvénient de l'argument de modèle est qu'il ne peut pas distinguer entre typedef alias:

typedef LONG HRESULT; 

Pour C, je pense qu'il n'y a rien que vous pouvez faire, sans changer vos struct. Si vous avez le contrôle sur les définitions de structure, voici deux astuces:

Ajoutez un champ au début de la structure et définissez le champ sur une valeur qui identifie de manière unique le type de structure, qui peut être utilisé par la structure. tostring fonction de choisir le code d'impression approprié.

typedef struct abcde 
{ 
    int unique_struct_type_id; // assign this to a number that represents "abcde" 
}; 

Une méthode similaire consiste à passer dans un pointeur de fonction pour imprimer la structure.

struct abcde 
{ 
    void (*print_fn) (abcde* p); // assign this to the printing function for "abcde" 
} 
#define PRINT_STRUCT(s) s->print_fn(s) 
Questions connexes