Que signifie #x dans une macro C?

Par exemple, j’ai une macro:

#define PRINT(int) printf(#int "%d\n",int) 

Je sais un peu quel est le résultat. Mais comment se fait-il que #int représente tout?

J’ai un peu oublié ce détail. Quelqu’un peut-il bien vouloir me donner un indice?

Merci!

Dans ce contexte (appliqué à une référence de paramètre dans une définition de macro), le signe dièse signifie pour développer ce paramètre jusqu’au texte littéral de l’argument qui a été transmis à la macro.

Dans ce cas, si vous appelez PRINT(5) l’extension de la macro sera printf("5" "%d\n", 5); qui imprimera 5 5 ; pas très utile; toutefois, si vous appelez PRINT(5+5) l’extension macro sera printf("5+5" "%d\n", 5+5); ce qui imprimera 5+5 10 , un peu moins sortingvial.

Cet exemple même est expliqué dans ce tutoriel sur le préprocesseur C (qui, soit dit en passant, est le premier hit Google pour le signe de livre macro c )).

“#” peut afficher le nom d’une variable, il est préférable de définir la macro comme ceci:

 #define PRINT(i) printf(#i "= %d\n", i) 

et l’utiliser comme ça:

 int i = 5; PRINT(i); 

Résultat affiché:

 i = 5 

C’est un mauvais choix de nom pour le paramètre macro, mais inoffensif (merci dreamlax).

Fondamentalement, si j’écris comme si

 PRINT(5); 

Il sera remplacé comme

 printf("5" "%d\n",5); 

ou

 printf("5 %d\n",5); 

C’est un processus appelé Ssortingngification , #int est remplacé par une chaîne composée de son contenu, 5 -> “5”