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

发布于 2024-12-02 21:38:13 字数 296 浏览 0 评论 0原文

#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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

只想待在家 2024-12-09 21:38:13

行为是正确的。所有未加引号的 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.

可是我不能没有你 2024-12-09 21:38:13

这是预期的行为。预处理器不知道 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.

复古式 2024-12-09 21:38:13

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

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

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

Easy fix: Change the parameter name to be different from your element name.

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

cpp won't match par against parent, so you'll get the behaviour you expect.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文