4

我有一个可变参数函数:

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)

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

4

2 回答 2

7

您必须__VA_ARGS__替换可变参数:

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

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

于 2012-05-14T22:09:32.557 回答
4

使用__VA_ARGS__代替...

#define LOGWRITE_L1(file, ...) LogWrite(file, 1, __FILE__, __FUNCTION__, __VA_ARGS__)
于 2012-05-14T22:11:17.843 回答