#define BINARY_TREE_PARENT_CORRECT(son, parent) ((son) ? (son->parent == parent) : 1)
事实证明,parent
中son->parent
表示结构成员也将被parent
中的son, parent
替换。
gcc版本为4.1.2
。
你认为这是一个错误还是预期的行为?
答案 0 :(得分:2)
行为是正确的。所有未引用的 parent 的出现都将被替换。预处理器不会猜测你的意思。它只是取代你所说的。
答案 1 :(得分:1)
这是预期的行为。预处理器不知道C的语法(除了在#if
中评估控制表达式时) - 它只是替换了令牌。
答案 2 :(得分:1)
轻松修复:将参数名称更改为与元素名称不同。
#define BINARY_TREE_PARENT_CORRECT(son, par) ((son) ? (son->parent == par) : 1)
cpp与父母不匹配,所以你会得到你期望的行为。