quelque chose comme #NAME ou ## NAME. que veulent-ils dire en C? Je les ai vus dans les documents GCC sur la macro.
L’opérateur ## concatène deux arguments en ne laissant aucun espace entre eux.
#define printe(a,b) a ## b printe(c,out) << "testing";
la sortie est: test
et # est utilisé pour le remplacement de paramètre avec le paramètre de chaîne comme
#define st(x) #x cout<
et # est aussi une directive du préprocesseur.
Une instruction de code commençant par #
indique que ce qui suit est une directive de préprocesseur et doit être développé par le pré-processeur.
##
est appelée macro de collage de jetons ou de concaténation de jetons .
De la page wikipedia décrivant le préprocesseur C :
L’opérateur ## concatène deux jetons en un seul, comme dans cet exemple:
#define DECLARE_STRUCT_TYPE(name) typedef struct name##_s name##_t DECLARE_STRUCT_TYPE(g_object); // Outputs typedef struct g_object_s g_object_t;
L’opérateur #
signale d’autres directives au pré-processeur C, par exemple: #include, #define, #undef, #error, #if, #ifdef, #ifndef, #else, #elif, #endif
Le ‘#’ n’est vraiment pas un opérateur, ce sont des directives de préprocesseur et le ‘##’ est utilisé uniquement pour les définitions de macro de fonction.
Il existe de nombreuses directives de préprocesseur en C:
Pour les définitions de macro, il y a:
#define #undef
Pour les inclusions conditionnelles, il y a:
#ifdef #ifndef #if #endif #else #elif
Pour le contrôle de ligne, il y a:
#line
Pour Erreur, il y a:
#error
Pour l’inclusion du fichier source, il y a:
#include
Pour la directive Pragma, il y a:
#pragma
Pour plus d’informations, consultez le site http://www.cplusplus.com/doc/tutorial/preprocessor/.