2011-09-03 48 views
3
#define BINARY_TREE_PARENT_CORRECT(son, parent) ((son) ? (son->parent == parent) : 1) 

事实证明,在son->parentparent这意味着一个结构构件也将通过在parentson, parent取代。这是gcc预处理器的错误吗?

gcc版本是4.1.2

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

回答

2

该行为是正确的。所有未引用的父母被替换。预处理器不会猜测你的意思。它只是取代你说的话。

1

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

1

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

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

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