将收到的可变数量的参数传递给另一个函数

Pab*_*mez 2 c arguments function ansi-c

在你说它重复之前,我已经读过:如何将可变数量的参数从一个函数传递到另一个函数?

我有这样的功能:

void tlog_function(t_log* logger, const char* message_template, ...) {
    pthread_mutex_lock(&loggerLock);
    log_function(logger, message_template, ...); // What I want to do..
    pthread_mutex_unlock(&loggerLock);
}
Run Code Online (Sandbox Code Playgroud)

而另一个这样的功能,不是我的,我在第三方库中使用它:

void log_function(t_log* logger, const char* message_template, ...);
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我想要做的只是在这个函数中添加一个互斥锁以使其具有线程安全性,我知道我可以使用va_list但在这种情况下我无法更改第二个函数的代码,因为它在库中我只有.h文件.

那么,有没有办法实现这一目标?

mis*_*mer 6

如果您无法更改代码并且没有va_list库函数的版本,您可以使用我所知道的最接近的事情是使用宏和##__VA_ARGS__(这是仅GCC扩展).

你会想要这样的东西:

#define tlog_function(logger, message_template, ...) do { \
    pthread_mutex_lock(&loggerLock);                                         \
    log_function(logger, message_template, ##__VA_ARGS__);                   \
    pthread_mutex_unlock(&loggerLock);                                       \
} while(0)
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

79 次

最近记录:

10 年,6 月 前