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

标签 c function arguments ansi-c

在你说它重复之前,我已经读过这个:How to pass variable number of arguments from one function to another?

我有这样一个函数:

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);
}

还有一个类似这样的函数,它不是我的,我从第三方库中使用它:

void log_function(t_log* logger, const char* message_template, ...);

如您所见,我想做的只是向该函数添加一个互斥量以使其成为线程安全的,我知道我可以使用 va_list 但在这种情况下我无法更改代码第二个函数,因为它在库中,而我只有 .h 文件。

那么,有什么办法可以做到这一点吗?

最佳答案

如果您无法更改代码并且没有va_list 版本的库函数,您可以使用我所知道的最接近的方法是使用宏和##__VA_ARGS__。 (which is a GCC only extension)。

你会想要这样的东西:

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

关于c - 将接收到的可变数量的参数传递给另一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31124725/

相关文章:

javascript - 等到前一个函数以 Angular 执行

javascript - 长字横向溢出时减小字体大小

c++ - Visual Studio 2013 c++ 函数语法错误

javascript - HackReactor,编码窗口现在可以使用名为 "Admissions"的方法访问名为 "showApp"的对象。不带任何参数调用此方法?

c++ - C++ 类中的构造函数

r - 如何将参数传递给桌面上的 Rscript?

在C中复制字符串的结尾

c - OCI错误: LNK1113: invalid machine type

c - c中链表的子列表?

c - 为什么段错误和程序以退出代码 139 结束?