Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何将参数传递给可变宏?_C_Function_Macros_Variadic Functions_Variadic Macros - Fatal编程技术网

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

C 如何将参数传递给可变宏?,c,function,macros,variadic-functions,variadic-macros,C,Function,Macros,Variadic Functions,Variadic Macros,我有一个可变函数: 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__,

我有一个可变函数:

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)

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

您必须将
\uuu VA\u ARGS\uu
作为可变参数的替换:

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

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

使用
\uu VA\u ARGS\uu
而不是

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

您似乎在示例代码中错误地放置了
int-Level
。。。(我很确定我知道你的意思,但最好让你来解决。)谢谢你!!哈哈,那会很尴尬的。