【问题标题】:what is `...` in c macro function?c宏函数中的`...`是什么?
【发布时间】:2020-08-25 06:48:39
【问题描述】:

您好,我一直在阅读一个 c 库,并且遇到过这样的宏函数:

#define TF_LITE_KERNEL_LOG(context, ...)           \
  do {                                             \  
    (context)->ReportError((context),__VA_ARGS__); \
} while (false)

我并没有完全理解使用... 作为参数之一。谁能看出它的目的是什么?如果以这样的方式调用函数,它是否会忽略其他参数? :TF_LITE_KERNEL_LOG(context, arg1, arg2, arg3)

【问题讨论】:

  • @Dai 宏,不是函数。
  • @Dai 是预处理器的东西,与可变参数函数完全无关。
  • 值得注意的是,可变参数函数(不幸的是)一直是 C 的一部分,但可变参数宏是在 1999 年引入的。

标签: c macros c-preprocessor


【解决方案1】:

这是可变参数标记:__VA_ARGS__ 被替换为宏的其余参数,例如在printf(),所以

TF_LITE_KERNEL_LOG(context, arg1, arg2, arg3) 会像:

context->ReportError(context, arg1, arg2, arg3).

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 2014-01-17
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 2014-10-06
    相关资源
    最近更新 更多