【问题标题】:What's the purpose of redundant parentheses in return(NULL)return(NULL) 中多余括号的目的是什么
【发布时间】:2012-01-18 17:41:12
【问题描述】:

我在某个C程序中看到了如下代码sn-p:

char *x;

if (s == NULL)
    return(NULL);
if ((x = strdup(s)))
    return x;

return(NULL) 中多余的括号有什么作用?

【问题讨论】:

标签: c


【解决方案1】:

从下面if的声明来看,作者就是喜欢写括号。

理论上,由于 NULL 是一个预处理器宏,您可以将其定义为 not 括在括号中的内容,因此可能会因运算符而具有不同的行为,具体取决于它属于哪个表达式优先规则——在这种情况下,将其包装在额外的括号中会“更安全”。

实际上,这不会发生。即使考虑这样的场景也会让我感到肮脏,所以我无法想象真正这样做的人的命运会是什么。

【讨论】:

  • if 语句中,在赋值时,括号通常是一种很好的做法,如示例所示。
  • @Macmade:当然,但是……除了任务之外,没有别的东西!当我仍然认为简洁很好时,我确实自己在作业周围写了括号,但当表达式中没有其他内容时就不行了。
  • if 中的括号防止某些编译器发出有关在 if 中使用赋值的警告。
  • if 语句中多余的括号将禁止来自 gcc 的关于使用 '=' 而不是 '==' 的警告。
  • @Jon:“不懂语言的人会感到困惑”不是避免使用语言功能的好理由。
【解决方案2】:

两个原因:

  1. 有些人真的很喜欢多余的括号。我不知道,但这不会伤害任何人。
  2. 有些人喜欢在调试时将return 定义为宏,以便在正常返回之前执行某种形式的附加日志记录。这些人疯了。

【讨论】:

  • +1 表示第二项,尤其是最后一句。
  • +1 无论如何,但实际上,“不伤害任何人”的事情并不完全正确。一些读者(包括我自己)很难理解和匹配过多的嵌套括号,并且非常感谢为避免使用冗余括号增加嵌套而做出的努力......
【解决方案3】:

有些人喜欢他们的回报。我唯一的问题是代码不一致。

【讨论】:

    【解决方案4】:

    有些人将return 视为一个函数,因此他们添加了额外的括号。即使return实际上是一个声明。

    请注意,其他一些人也将sizeof 视为标准库函数,并且喜欢在操作数是表达式时添加额外的括号。当然sizeof 是一个操作符而不是一个函数。

    【讨论】:

      【解决方案5】:

      在这种情况下,它们没有特定的目的。通常我更喜欢在 return 语句中加上括号。
      您应该始终如一地放置它们或根本不放置它们。 此处不一致的一种可能解释是 NULL 是一个宏,有些人习惯用括号括住宏以确保它们被正确包含。

      【讨论】:

        猜你喜欢
        • 2012-04-23
        • 2022-11-03
        • 2012-10-13
        • 1970-01-01
        • 2012-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-17
        相关资源
        最近更新 更多