Два идентичных определения препроцессора дают разные результаты - PullRequest
1 голос
/ 21 ноября 2011

Рассмотрим фрагмент:

#define CAT(a, b) a##b

#define M_0 CAT(x, y)
#define M(a) CAT(M_, a)()
M(0);

#define N_0() CAT(x, y)
#define N(a) CAT(N_, a)()
N(0);

Для меня оба определения M(a) и N(a) выглядят одинаково.Однако cpp в GCC 4.6.1 расширяет это до:

CAT(x, y)();
xy;

Почему?

1 Ответ

5 голосов
/ 21 ноября 2011
#define M_0 CAT(x, y)
#define N_0() CAT(x, y)

M_0 - простая текстовая замена.N_0 - это макрофункция, которая при оценке оценивает любые другие макрофункции при необходимости.

...