Sag*_*gar 4 c macros function variadic-functions variadic-macros
我有一个可变函数:
LogWrite(FILE * fp, int level, const char * filename, const char * function, ...)
Run Code Online (Sandbox Code Playgroud)
它应该像这样调用:
LogWrite(fp, int Level, __FILE__, __FUNCTION__, "Message: %s", message)
Run Code Online (Sandbox Code Playgroud)
但是,我想编写一个可变参数宏,以便更容易调用:
1: #define LOGWRITE_L1(...) LogWrite(file, 1, __FILE__, __FUNCTION__, ...)
or
2: #define LOGWRITE_L1(file, ...) LogWrite(file, 1, __FILE__, __FUNCTION__, ...)
Run Code Online (Sandbox Code Playgroud)
这样开发人员可以使用以下方法调用它:
LOGWRITE_L1(myfile, "Hello!");
Run Code Online (Sandbox Code Playgroud)
代替
LogWrite(myfile, 1, __FILE__, __FUNCTION__, "Hello!")
Run Code Online (Sandbox Code Playgroud)
但是,这两种方法都给我一个编译器错误.
1: expected expression before '...'
2:'file' undeclared (first use in this function)
Run Code Online (Sandbox Code Playgroud)
这可能还是我在浪费时间?我以前从未使用过变量函数,所以不确定.我的功能工作......我使用完整的声明调用它,并写入我想要的文件.
你必须把它__VA_ARGS__作为可变参数的替代:
#define LOGWRITE_L1(file, ...) LogWrite(file, 1, __FILE__, __FUNCTION__, __VA_ARGS__)
Run Code Online (Sandbox Code Playgroud)
这只是C99,C11和C++ 11标准的一部分.一些编译器提供与可变宏的处理有关的扩展; 检查你的手册.