【发布时间】:2022-01-13 23:56:54
【问题描述】:
我正在尝试使用 systemd 的辅助宏,但我不太了解其工作机制。系统宏如下;
#define DEFINE_TRIVIAL_CLEANUP_FUNC(type, func) \
static inline void func##p(type *p) { \
if (*p) \
*p = func(*p); \
}
我不明白如何将“p”参数作为我上面提到的宏中的参数。我想用一个例子来解释这个问题。
首先,我创建了udev枚举对象;
struct udev_enumerate* enumerate = udev_enumerate_new(pudev);
当我以后想删除这个对象时,我该如何使用 systemd 宏呢?
DEFINE_TRIVIAL_CLEANUP_FUNC(struct udev_enumerate*, udev_enumerate_unref);
类型和功能是根据宏指定的,但是宏中的“p”参数(即我生成的对象)是如何在宏中指定的呢?
【问题讨论】:
-
##之后的p对我来说似乎是一个错误。能给个链接吗? -
你可以看看这个链接:github.com/openSUSE/systemd/blob/…
标签: c macros c-preprocessor