【问题标题】:Using -> operator in return statements in C在 C 中的 return 语句中使用 -> 运算符
【发布时间】:2019-02-26 02:19:03
【问题描述】:

我正在努力学习C,我遇到的问题之一,我不能完全理解。问题是如果您使用 -> 运算符返回会出现什么问题。因此,如果代码最初是这样做的:

myVariable = foo->bar;
return myVariable;

然后如果改成这样:

return foo->bar;

会出什么问题?看起来应该还是可以的,所以我不确定为什么会出错。

【问题讨论】:

  • 请发布您的实际代码(最多 20 行应该没问题)。从您发布的 sn-p 很难说。
  • 编辑您的帖子以包含此问题的实际文本?
  • 在任何一种情况下,如果变量foo 为NULL,代码都会崩溃。最好在取消引用之前检查 foo 是否为 NULL。如果它是 NULL,你会返回一些特殊的值。
  • 如果 myVariable 仅用作仅返回的临时变量,则可能会对其进行优化,以便两个实现都编译为同一个程序集。

标签: c function return


【解决方案1】:

您正在从一次性变量转换为直接返回该变量。这是允许的,在这种情况下更可取,因为它避免了为 myVariable 声明错误类型时出现的任何潜在错误。

return 的上下文中,-> 没有什么特别之处。你可以返回任何表达式,像->这样的东西可以是表达式的一部分。

如果您好奇,可以阅读C specification,其中有详细说明:

return [ expr ] ';'

这意味着如果foo->bar 是一个有效的表达式,因为这是一段可编译的代码,那么return foo->bar; 也是有效的。您的代码暗示 foo 是某种指向具有 bar 作为属性的东西的指针。如果不是这种情况,那么这两个版本都不会工作。它还取决于与该属性类型匹配的相关函数的返回类型。

【讨论】:

    猜你喜欢
    • 2022-12-12
    • 2011-04-24
    • 2015-11-28
    • 2016-06-28
    • 2019-11-14
    • 1970-01-01
    • 2018-05-30
    • 2017-11-04
    • 2014-02-04
    相关资源
    最近更新 更多