Как вернуть строку из функции MACRO в C? - PullRequest
3 голосов
/ 13 октября 2011

Я хочу создать строку, основанную на значении, переданном в качестве аргумента функции MACRO. Что-то вроде:

#define ABC(x,y) return "anystr_x_y.tar.bz2"
main()
{
   a = ABC(2,3);
}

Итак, наконец, он должен вернуть «anystr_2_3.tar.bz2»

Мне было интересно, как создать эту строку со значением, переданным в качестве аргумента для MACRO fnc.

Любая помощь! спасибо!

Ответы [ 3 ]

8 голосов
/ 13 октября 2011

Определите свой макрос следующим образом, используя «оператор stringize»:

#define ABC(x,y) "anystr_" #x "_" #y ".tar.bz2"
1 голос
/ 13 октября 2011

Макросы не возвращают вещи, так как они не являются функциями.Они просто функциональность замены токена.То, что вы на самом деле хотите, хотя бы одно, и на вашем месте я бы сделал это вместо функции.Однако решение может выглядеть следующим образом:

#define ABC(x,y) "anystr_" #x "_" #y ".tar.bz2"

Это использует тот факт, что строковые литералы сложены вместе, поэтому "Hello " "World!" интерпретируется как "Hello World!".

0 голосов
/ 13 октября 2011

В C (как и в C ++) нет такого понятия, как макрофункция.Макросы обрабатываются препроцессором до компиляции кода.Приведенный выше пример кода будет обработан компилятором следующим образом:

main()
{
  a = return "anystr_x_y.tar.bz2"
}

Чтобы достичь того, что вы пытаетесь сделать, вы должны указать препроцессору объединить x, y и постоянные части вашей строки.Это делается с помощью оператора ##, например:

#define ABC(x,y) ("anystr_" ## x ## "_" ## y ## ".tar.bz2")

. В результате компилятору будет передан следующий код:

main()
{
  a = ("anystr_2_3.tar.bz2")
}
...