你能在C语言中使用宏定义实现类似以下功能吗?
#define SUPERMACRO(X,Y) #define X Y
then
SUPERMACRO(A,B) expands to #define A B
我有这样的感觉,不是因为预处理器只进行一次扫描。
只能使用官方的 GCC,不要使用第三方工具。
你能在C语言中使用宏定义实现类似以下功能吗?
#define SUPERMACRO(X,Y) #define X Y
then
SUPERMACRO(A,B) expands to #define A B
我有这样的感觉,不是因为预处理器只进行一次扫描。
只能使用官方的 GCC,不要使用第三方工具。
宏不能扩展为预处理指令。从C99 6.10.3.4/3“重新扫描和进一步替换”中:
即使宏替换后的预处理标记序列类似于预处理指令,也不会将其作为预处理指令处理。
您不能在其他宏中定义宏,但是您可以从您的宏中调用另一个宏,这将使您基本上获得相同的结果。
#define B(x) do {printf("%d", (x)) }while(0)
#define A(x) B(x)
所以,A(y)
会扩展为do {printf("%d", (y)) }while(0)
不会。操作顺序是,所有预处理器指令在进行任何宏扩展之前都会被识别; 因此,如果一个宏展开成类似预处理器指令的东西,它不会被识别为这样,而是会被解释为(错误的)C源代码。
抱歉,您不能这样做。您可以在宏中调用其他宏,但不能定义新的宏。
您可以尝试仅使用预处理选项运行它,然后使用预处理文件进行编译。