#define DF__TCDX0_RB_INFO__BRANCH_INDEX_LIST__[0, 2] 1
warning: missing whitespace after the macro name [enabled by default]
我正在尝试编译第三方头文件,而gcc正在抛出此警告。 我不确定这个宏的作用。它是定义以下内容的捷径吗?如何修复警告?
#define DF__TCDX0_RB_INFO__BRANCH_INDEX_LIST__0 1
#define DF__TCDX0_RB_INFO__BRANCH_INDEX_LIST__1 1
#define DF__TCDX0_RB_INFO__BRANCH_INDEX_LIST__2 1
答案 0 :(得分:2)
#define DF__TCDX0_RB_INFO__BRANCH_INDEX_LIST__[0, 2] 1
在C89 / C90中,这是一个有效的宏定义,但[
和]
字符没什么特别之处。它定义了一个名为DF__TCDX0_RB_INFO__BRANCH_INDEX_LIST__
的类似对象的宏,其定义等同于:
#define DF__TCDX0_RB_INFO__BRANCH_INDEX_LIST__ [ 0 , 2] 1
以便DF__TCDX0_RB_INFO__BRANCH_INDEX_LIST__
的任何使用扩展到[0, 2] 1
。 (这甚至不可能有意义; C不允许[...]
内的多个索引表达式,而0, 2
将被解释为等同于2
的逗号表达式。)< / p>
C99增加了一条新规则(6.10.3p3):
定义中的标识符和替换列表之间应该有空格 一个类似对象的宏。
使上述定义无效(约束违规需要诊断)。在宏名称后添加空格:
#define DF__TCDX0_RB_INFO__BRANCH_INDEX_LIST__ [0, 2] 1
会使警告静音,但这不太可能是正确的修复。
它看起来就像是允许使用宏来使用[
和]
用于某些特殊目的,但这不是标准语言支持的。 可能是一个特定于编译器的扩展,但它不是我遇到的扩展,我可能不建议使用它。
查看一些引用宏的代码可能很有用。