我想定义一个宏,该宏将为我生成程序文本并设置一些非字符串宏值。我知道将#define
包含在另一个#define
中是行不通的,所以我正在尝试寻找另一种方法。
一个简单的例子:
#include <stdio.h>
#define START_SYNTHETIC int SYNTHETIC_FUNCTION() {
#define END_SYNTHETIC return 0;}
#define SYNTHETIC_FUNCTION my_function
START_SYNTHETIC
printf("Hello from %s", "SYNTHETIC_FUNCTION");
END_SYNTHETIC
int main() {
my_function();
}
此代码有点用,它会产生以下输出:
Hello from SYNTHETIC_FUNCTION
它有两个问题:
函数名称未扩展,我在输出中仅显示“ SYNTHETIC_FUNCTION”。目前这并不重要,但以后可能需要。
我不喜欢使用三行来启动我的综合功能。自动格式化程序插入的空行特别令人讨厌。我可以将其简化为单个宏调用吗?
答案 0 :(得分:1)
有没有一种方法可以定义宏并在单个语句中输出一些代码?
否,在C宏中无法定义其他宏。
函数名称未扩展,输出中只有“ SYNTHETIC_FUNCTION”。
确定不是-它位于字符串文字中。宏替换不是在字符串文字内完成的。
我可以将其简化为单个宏调用吗?
我不理解所有这些代码的意义。只是use __func__
。
int my_function(void) {
printf("Hello from %s\n", __func__);
return 0;
}
或将名称作为宏参数传递
#define SYNTHETIC(name) \
int name(void) { \
printf("Hello from %s\n", #name); \
printf("but really, just use __func__ anyway...: %s\n", __func__); \
return 0; \
}
SYNTHETIC(my_function)