Можно ли сделать что-то вроде этого с макросом в C?
#define SUPERMACRO(X,Y) #define X Y
then
SUPERMACRO(A,B) expands to #define A B
У меня есть чувство, не потому что препроцессор только делает одну передачу.
Официальный gcc только. Никакие сторонние программы.
Макросы не могут расширяться в директивы предварительной обработки. Из C99 6.10.3.4/3 "Повторное сканирование и дальнейшая замена":
Полученная полностью макрозамещенный последовательность маркеров препроцессирования не обрабатывается как директива предварительной обработки, даже если она похожа на нее,
Извините, вы не можете. Вы можете вызывать другие макросы в макросах, но не определять новые.
Нет. Порядок операций таков, что все директивы препроцессора распознаются перед любым макрорасполнениями; таким образом, если макрос расширяется во что-то, что выглядит как директива препроцессора, он не будет распознаваться как таковой, а скорее будет интерпретироваться как (ошибочный) исходный текст C.
Вы не можете определить макросы в других макросах, но вы можете вызвать макрос из своего макроса, что может дать вам по сути те же результаты.
#define B(x) do {printf("%d", (x)) }while(0)
#define A(x) B(x)
так, A(y)
расширяется до do {printf("%d", (y)) }while(0)