web-dev-qa-db-fra.com

Développez les macros à l'intérieur de la chaîne entre guillemets

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\"");

25
davide

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.

37
tomahh
#define COLOR "#00ff00"
f("abc "COLOR);
4
singpolyma