繁体   English   中英

如何将参数传递给可变参数宏?

[英]How to pass arguments to a variadic macro?

我有一个可变函数:

LogWrite(FILE * fp, int level, const char * filename, const char * function, ...)

它应该像这样调用:

LogWrite(fp, int Level, __FILE__, __FUNCTION__, "Message: %s", message)

但是,我想编写一个可变参数宏,以便更容易调用:

1: #define LOGWRITE_L1(...) LogWrite(file, 1, __FILE__, __FUNCTION__, ...)
or
2: #define LOGWRITE_L1(file, ...) LogWrite(file, 1, __FILE__, __FUNCTION__, ...)

这样开发人员可以使用以下方法调用它:

LOGWRITE_L1(myfile, "Hello!");

代替

LogWrite(myfile, 1, __FILE__, __FUNCTION__, "Hello!")

但是,这两种方法都给我一个编译器错误。

1: expected expression before '...'
2:'file' undeclared (first use in this function)

这可能还是我在浪费时间? 我以前从未使用过变量函数,所以不确定。 我的功能工作......我使用完整的声明调用它,并写入我想要的文件。

您必须将__VA_ARGS__作为可变参数的替代:

#define LOGWRITE_L1(file, ...) LogWrite(file, 1, __FILE__, __FUNCTION__, __VA_ARGS__)

这只是C99,C11和C ++ 11标准的一部分。 一些编译器提供与可变宏的处理有关的扩展; 检查你的手册。

使用__VA_ARGS__而不是...

#define LOGWRITE_L1(file, ...) LogWrite(file, 1, __FILE__, __FUNCTION__, __VA_ARGS__)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM