【发布时间】: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
我在某个C程序中看到了如下代码sn-p:
char *x;
if (s == NULL)
return(NULL);
if ((x = strdup(s)))
return x;
return(NULL) 中多余的括号有什么作用?
【问题讨论】:
标签: c
从下面if的声明来看,作者就是喜欢写括号。
理论上,由于 NULL 是一个预处理器宏,您可以将其定义为 not 括在括号中的内容,因此可能会因运算符而具有不同的行为,具体取决于它属于哪个表达式优先规则——在这种情况下,将其包装在额外的括号中会“更安全”。
实际上,这不会发生。即使考虑这样的场景也会让我感到肮脏,所以我无法想象真正这样做的人的命运会是什么。
【讨论】:
if 语句中,在赋值时,括号通常是一种很好的做法,如示例所示。
if 中的括号防止某些编译器发出有关在 if 中使用赋值的警告。
两个原因:
return 定义为宏,以便在正常返回之前执行某种形式的附加日志记录。这些人疯了。【讨论】:
有些人喜欢他们的回报。我唯一的问题是代码不一致。
【讨论】:
有些人将return 视为一个函数,因此他们添加了额外的括号。即使return实际上是一个声明。
请注意,其他一些人也将sizeof 视为标准库函数,并且喜欢在操作数是表达式时添加额外的括号。当然sizeof 是一个操作符而不是一个函数。
【讨论】:
在这种情况下,它们没有特定的目的。通常我更喜欢在 return 语句中加上括号。
您应该始终如一地放置它们或根本不放置它们。
此处不一致的一种可能解释是 NULL 是一个宏,有些人习惯用括号括住宏以确保它们被正确包含。
【讨论】: