坚持理解以下宏定义

Stuck in understanding following macro definition

本文关键字:宏定义 坚持      更新时间:2023-10-16

下面是一个宏定义:

#define print_debug(fmt, ...) 
__print_debug__(__FILE__, __func__, __LINE__, fmt, ## __VA_ARGS__)

我无法在Visual Studio中找到__FILE____func____LINE__## __VA_ARGS__的扩展(我可以得到对应于变量参数的__VA_ARGS__)。特别是## __VA_ARGS__剂量是什么意思?

__print_debug__

是一个类似于宏的函数,它将打印传递给它的所有参数。
这里

  1. __FILE__:--> 将传递当前文件名
  2. __func__:--> 将传递当前函数名称。
  3. __LINE__:--> 将传递当前行号

您可以查看此链接以获取更多信息。
现在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

命令并查看宏 .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; #
}