функция макроса для печати - PullRequest
0 голосов
/ 13 апреля 2010

если, например, у меня есть:

#define PRINT(x) fprintf(stderr, x);

и в коде я добавляю его:

 PRINT(("print this")) 

вывод: [распечатать]

если я добавлю это:

 PRINT(("print %s", "this"))

вывод: [Это]

Может кто-нибудь объяснить мне, почему он получает только аргумент "this", а не всю строку?

1 Ответ

6 голосов
/ 13 апреля 2010
PRINT(("print %s", "this"))

становится:

fprintf(stderr, ("print %s", "this"));

, что эквивалентно:

fprintf(stderr, "this");

Однако , variadic macros (из C99) работают:

#define PRINT(...) fprintf(stderr, __VA_ARGS__)

int main() {
  PRINT("print %s", "this");
  return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...