существует ли альтернатива Итоа с использованием макросов директивы компилятора - PullRequest
0 голосов
/ 15 мая 2011

Мне было интересно, может ли быть способ для преобразования целочисленной переменной в строку с помощью директивы компилятора stringizing. Я пытался использовать:

#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;
}

, так как добавление другого уровня в макросе stringize (# 1) приведет к тому, что сначала произойдет подстановка, а затем поместит его в код (# 2), аналогичным образом можно будет заменить переменные во время компиляции значениями. Я хочу сказать, если var = value; тогда есть ли способ, которым some_macro (var) -> может преобразовать его в «значение»?

Ответы [ 2 ]

4 голосов
/ 15 мая 2011

Невозможно получить значение переменной с помощью препроцессора - предварительная обработка (как следует из названия) выполняется перед компиляцией, и на этом этапе переменные не существуют.

4 голосов
/ 15 мая 2011

Нет. Препроцессор действует на токены, он не знает о переменных и их значениях. Что бы вы хотели получить, если бы значение было прочитано из стандартного ввода?

...