Duplicata possible:
C Macros pour créer des chaînes
J'ai une fonction qui accepte un argument de type char*
, Comme f("string");
Si l'argument chaîne est défini à la volée dans l'appel de fonction, comment les macros peuvent-elles être développées dans le corps de la chaîne?
Par exemple:
#define COLOR #00ff00
f("abc COLOR");
serait équivalent à
f("abc #00ff00");
mais à la place, l'expansion n'est pas effectuée et la fonction reçoit littéralement abc COLOR
.
En particulier, j'ai besoin d'étendre la macro à exactement \"#00ff00\"
, Afin que ce jeton entre guillemets soit concaténé avec le reste de l'argument chaîne passé à f()
, guillemets inclus; c'est-à-dire que le préprocesseur doit terminer son travail et accueillir le compilateur qui transforme le code de f("abc COLOR");
en f("abc \"#00ff00\"");
Vous ne pouvez pas développer des macros dans des chaînes, mais vous pouvez écrire
#define COLOR "#00ff00"
f("abc "COLOR);
N'oubliez pas que cette concaténation est effectuée par le préprocesseur C et n'est qu'une fonctionnalité permettant de concaténer des chaînes simples, et non des variables.
#define COLOR "#00ff00"
f("abc "COLOR);