c - 是否有任何包装函数的 C 宏?
问题描述
有没有办法像我愿意用这种语法做的事情:
#define WRAP_MY_FUNCTION(x){Y} void x(int integer){printf("begin\n"); Y ; printf("end\n");}
所以我可以拥有这个
WRAP_MY_FUNCTION(Foo){printf("hello world\n");}
这相当于
void Foo(int integer)
{
printf("begin\n");
printf("hello world\n");
printf("end\n");
}
输出
begin
hello world
end
注意:我更喜欢在括号中包含函数代码,以便最终用户理解这是一个代码块。
解决方案
您可以将另一个参数传递给宏来定义您的打印语句。
像这样的东西:
#define WRAP_MY_FUNCTION(x, Y) void x(int integer){printf("begin\n"); Y; printf("end\n");}
WRAP_MY_FUNCTION(Foo, printf("hello world\n"))
如果您想让最终用户更清楚这是一个代码块,并且正如 rici 指出的那样,添加一个 Variadic 宏来修复可能在您的源代码中的未受保护的逗号,您可以将您的定义重写为:
#define WRAP_MY_FUNCTION(x, ...)\
void x(int integer) \
{ \
printf("begin\n"); \
__VA_ARGS__ \
printf("end\n"); \
} \
推荐阅读
- c# - 如何在运行时在 Start() 或可在 Update() 中使用的唤醒方法上设置变量?
- flutter - 关于颤振中尖括号使用的困惑
- azure - 无法在同一 arm 模板中为密钥库引用用户分配身份的 principalId
- google-apps-script - 基于 Google 电子表格中日期的 Slack 消息
- r - 简化嵌套数据框的列表
- c# - 我如何找出对撞机的层?
- hyperledger-fabric - 在所有订购者都关闭的情况下对等点的预期行为
- swift - var 中的 Swift 函数
- python - 将一列的值与另一列的所有行进行比较
- html - 边框传输动画始终可见