L'alternative ITOA existe-t-il en utilisant des macros de directive de compilateur

StackOverflow https://stackoverflow.com/questions/6007180

  •  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"?

Était-ce utile?

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?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top