【问题标题】:Usage of underscore as argument of a macro function使用下划线作为宏函数的参数
【发布时间】:2025-05-15 01:05:02
【问题描述】:

C中,下划线作为宏参数是什么意思?

#define FUNC(_) VALUE

这是一个虚拟参数吗?有适合的用例示例吗?

【问题讨论】:

  • 是的,如果不使用它是一个虚拟参数,但名称没有什么特别之处。它可能被称为xfoo 或其他任何名称。

标签: c macros c-preprocessor


【解决方案1】:

_ 没有特殊含义,我想他们之所以使用它是因为它看起来好像参数不存在。

_ 只是一个有效的标识符,因此它被采用,因此宏需要一个参数,但它使宏定义看起来好像没有参数。

#define FUNC(ignoredParameter) VALUE

完全一样。

【讨论】:

    【解决方案2】:

    在这种情况下,代码可以读作:

    FUNC 接受一个参数,但它并不关心它是什么。不管传入什么,VALUE都是结果。

    单个_ 是C 中的有效标识符,因此适合用作宏参数名称。

    【讨论】:

    • 好吧,那么如果定义指向一个值,则不需要这样的东西;对于其他情况,我明白了。谢谢。
    • 我从字面上理解了你的例子,这就是它的解释方式。由于_ 是一个有效的标识符,如果程序员选择这样做,它可以在宏体内使用。然而,这是一个糟糕的选择,因为它会损害可读性。
    • 下划线有什么特别之处吗,或者它只是有一个不需要的参数的约定含义?
    • @Carcigenicate:_ 是一个有效的标识符。没有约定将其用作不需要的参数。我对此的解释是基于替换文本VALUE 不以任何方式使用_