Que font les opérateurs # et ## en C?

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/.