坚持理解下面的宏定义

时间:2018-01-27 11:28:56

标签: c++ macros

这是一个宏定义:

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

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

1 个答案:

答案 0 :(得分:0)

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

  1. __FILE__: - >将传递当前文件名
  2. __func__: - >将传递当前函数名称。
  3. __LINE__: - >将通过当前行号
  4. 您可以查看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; #
     }