这是gcc预处理器的错误吗?

时间:2011-09-03 01:39:00

标签: gcc c-preprocessor

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

事实证明,parentson->parent表示结构成员也将被parent中的son, parent替换。

gcc版本为4.1.2

你认为这是一个错误还是预期的行为?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

轻松修复:将参数名称更改为与元素名称不同。

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

cpp与父母不匹配,所以你会得到你期望的行为。