【问题标题】:Is this a bug of gcc preprocessor?这是 gcc 预处理器的错误吗?
【发布时间】:2011-09-03 01:38:59
【问题描述】:
#define BINARY_TREE_PARENT_CORRECT(son, parent) ((son) ? (son->parent == parent) : 1)

原来son->parent 中的parent 意味着结构成员也将被son, parent 中的parent 替换。

gcc 版本是4.1.2

您认为这是错误还是预期行为?

【问题讨论】:

    标签: gcc c-preprocessor


    【解决方案1】:

    行为是正确的。所有未引用的 parent 都被替换。预处理器不会尝试猜测您的意思。它只是取代了你所说的。

    【讨论】:

      【解决方案2】:

      这是预期的行为。预处理器不知道 C 的语法(除非在评估 #if 中的控制表达式时)——它只是替换标记。

      【讨论】:

        【解决方案3】:

        简单修复:将参数名称更改为与您的元素名称不同。

        #define BINARY_TREE_PARENT_CORRECT(son, par) ((son) ? (son->parent == par) : 1)
        

        cpp 不会将 par 与 parent 匹配,因此您会得到您期望的行为。

        【讨论】:

          猜你喜欢
          • 2017-06-04
          • 2013-05-04
          • 1970-01-01
          • 1970-01-01
          • 2014-09-13
          • 2011-04-24
          • 1970-01-01
          • 2021-01-16
          • 1970-01-01
          相关资源
          最近更新 更多