C preprocessor Macro defining Macro

删除回忆录丶 提交于 2019-12-18 12:04:56

问题


Can you do something like this with a macro in C?

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

then

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

I have a feeling not because the preprocessor only does one pass.

Official gcc only. No third-party tools please.


回答1:


Macros can't expand into preprocessing directives. From C99 6.10.3.4/3 "Rescanning and further replacement":

The resulting completely macro-replaced preprocessing token sequence is not processed as a preprocessing directive even if it resembles one,




回答2:


You cannot define macros in other macros, but you can call a macro from your macro, which can get you essentially the same results.

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

so, A(y) is expanded to do {printf("%d", (y)) }while(0)




回答3:


No. The order of operations is such that all preprocessor directives are recognized before any macro expansion is done; thus, if a macro expands into something that looks like a preprocessor directive, it won't be recognized as such, but will rather be interpreted as (erroneous) C source text.




回答4:


Sorry, you cannot. You can call other macros in macros but not define new ones.




回答5:


You could try running it through with only the preprocess option, then compiling with the preprocessed file.




回答6:


You might do this though: #define SUPERMACRO(X,Y) define X Y

Then you can use your editors macro-expansion functionality and paste in the missing #.

Or even better: Use a different, more powerful string-processing language as your preprocessor.



来源:https://stackoverflow.com/questions/2429240/c-preprocessor-macro-defining-macro

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!