L'alternative ITOA existe-t-il en utilisant des macros de directive de compilateur
-
14-11-2019 - |
Question
Je me demandais qu'il peut y avoir un moyen de chaîner une variable entière à l'aide de la directive de compilateur de chaîne. J'ai essayé d'utiliser:
#define stringize(a) #a
#define h(a) stringize(a)
#define g(a,b) a##b
#define f(a,b) g(a,b)
int main()
{
int num = 1024;
printf("%s=%s\n",stringize(h(f(1,2))), h(f(1,2))); //1. h(f(1,2))=12
printf("%s=%s\n",h(h(f(1,2))), h(f(1,2))); //2. "12"=12
printf("%s=%d\n", h(num),num); //num=1024
return 0;
}
Ainsi, l'ajout d'un autre niveau dans la macro stringize (# 1) fera d'abord la substitution, puis la plaçant dans le code (# 2), de la même manière que les variables peuvent être remplacées au moment de la compilation par les valeurs. Je veux dire si var = valeur; Ensuite, y a-t-il un moyen que certains_macro (var) -> peuvent le corriger en "valeur"?
La solution
Il n'y a aucun moyen d'obtenir la valeur d'une variable en utilisant le préprocesseur - le prétraitement (comme son nom l'indique) a lieu avant la compilation, et les variables n'existent pas à ce stade.
Autres conseils
Non. Le préprocesseur agit sur les jetons, il ne connaît pas les variables et leurs valeurs. Que voudriez-vous obtenir si la valeur était lue de Stdin?