这是 gcc 预处理器的错误吗?
#define BINARY_TREE_PARENT_CORRECT(son, parent) ((son) ? (son->parent == parent) : 1)
原来,son->parent
中的 parent
意味着结构体成员也会被 son 中的
。parent
替换,父级
gcc 版本是4.1.2
。
您认为这是一个错误还是预期的行为?
#define BINARY_TREE_PARENT_CORRECT(son, parent) ((son) ? (son->parent == parent) : 1)
It turns out that the parent
in son->parent
which means a struct member will also be replaced by the parent
in son, parent
.
The gcc version is 4.1.2
.
Do you think it's a bug or expected behavior?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
行为是正确的。所有未加引号的 parent 都会被替换。预处理器不会尝试猜测您的意思。它只是取代你所说的。
The behavior is correct. All unquoted occurrences of parent are substituted. The preprocessor does not try to guess what you mean. It just replaces what you say.
这是预期的行为。预处理器不知道 C 的语法(除非计算
#if
中的控制表达式)——它只是替换标记。This is expected behavior. The preprocessor does not know C's syntax (except when evaluating the controlling expression in an
#if
) -- it just replaces tokens.简单修复:将参数名称更改为与元素名称不同。
cpp 不会与父级匹配,因此您将得到您期望的行为。
Easy fix: Change the parameter name to be different from your element name.
cpp won't match par against parent, so you'll get the behaviour you expect.