C Макрос препроцессора определение Макроса

Можно ли сделать что-то вроде этого с макросом в C?

#define SUPERMACRO(X,Y) #define X Y

then

SUPERMACRO(A,B) expands to #define A B

У меня есть чувство, не потому что препроцессор только делает одну передачу.

Официальный gcc только. Никакие сторонние программы.

40
задан Brian Tompsett - 汤莱恩 22 February 2016 в 22:56
поделиться

4 ответа

Макросы не могут расширяться в директивы предварительной обработки. Из C99 6.10.3.4/3 "Повторное сканирование и дальнейшая замена":

Полученная полностью макрозамещенный последовательность маркеров препроцессирования не обрабатывается как директива предварительной обработки, даже если она похожа на нее,

31
ответ дан 27 November 2019 в 01:50
поделиться

Извините, вы не можете. Вы можете вызывать другие макросы в макросах, но не определять новые.

2
ответ дан 27 November 2019 в 01:50
поделиться

Нет. Порядок операций таков, что все директивы препроцессора распознаются перед любым макрорасполнениями; таким образом, если макрос расширяется во что-то, что выглядит как директива препроцессора, он не будет распознаваться как таковой, а скорее будет интерпретироваться как (ошибочный) исходный текст C.

3
ответ дан 27 November 2019 в 01:50
поделиться

Вы не можете определить макросы в других макросах, но вы можете вызвать макрос из своего макроса, что может дать вам по сути те же результаты.

#define B(x) do {printf("%d", (x)) }while(0)
#define A(x) B(x)

так, A(y) расширяется до do {printf("%d", (y)) }while(0)

14
ответ дан 27 November 2019 в 01:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: