这是一个宏定义:
#define print_debug(fmt, ...) \
__print_debug__(__FILE__, __func__, __LINE__, fmt, ## __VA_ARGS__)
我无法在visual studio中找到__FILE__
,__func__
,__LINE__
和## __VA_ARGS__
的扩展(我可以获得与变量参数对应的__VA_ARGS__
)。特别是剂量## __VA_ARGS__
是什么意思?
答案 0 :(得分:0)
__print_debug__
是一个类似宏的函数,它将打印传递给它的所有参数
在这里
__FILE__
: - >将传递当前文件名__func__
: - >将传递当前函数名称。 __LINE__
: - >将通过当前行号您可以查看This Link for more information on it.
现在fmt
和## __VA_ARGS__
:
让我举几个例子。
print_debug(fmt,var1,var2,var3)
宏扩展如下:
__print_debug__(__FILE__, __func__, __LINE__, fmt,var1,var2,var3)
这是因为##
将连接参数的所有变量列表,即__VA_ARGS__
在macro.c文件中保存以下代码并使用
进行编译gcc -E macro.c -o macro.i
命令并查看macro.i文件。
#define print_debug(fmt, ...) \
__print_debug__(__FILE__, __func__, __LINE__, fmt, ## __VA_ARGS__)
void call_Macro()
{
print_debug(2,3,4,5) //Here 2 is nothing but fmt
}
int main()
{
call_Macro();
return 0; #
}