返回运算符还是函数?

时间:2010-05-06 12:58:54

标签: c function operators return sizeof

我认为这太基础了,但这两种方法都有用吗?

return true;   // 1

return (true); // 2

类似:sizeofexit

我猜:

  

如果return是函数,1就是   错误的。

     

因此,返回应该是unary operator,也可以接受   括号...非常类似于unary minus-5-(5),两者都是   好的。

它是什么 - 一元运算符?

7 个答案:

答案 0 :(得分:29)

return是一个 关键字 操纵控制流。因为它类似于iffor等。它可以使用或不使用表达式(return;void函数返回)。当然,与所有表达式一样,允许使用额外的括号。 (因此return (42);int i = (4*10+2);类似,在这两种情况下,括号都是多余的,但允许使用。)

sizeof 关键字 ,是运算符,类似于newdelete+->::等。

std::exit()是一个 标识符 ,表示C标准库的函数(它永远不会返回给调用者)。

答案 1 :(得分:27)

return只是一种语言/控制流构造。它当然不是一个函数,因为它在语法上是不可简化的,它也不是真正的运算符,因为它没有返回值。

答案 2 :(得分:17)

return不是运算符,也不是函数。 return是一个关键字,形成 返回语句 ,属于跳转语句的类别。在这方面,它与sizeofexit完全没有相似之处。

要求()围绕return的论点存在于古代预标准版本的C(例如CRM C)中,但很快被淘汰,即使是古怪的习惯包裹即使在今天,也可以不时地看到return中多余()的论点。

答案 3 :(得分:7)

return是一个控制流关键字,就像gotobreakcontinueifelse ...不要认为它是运算符,因为它不会改变它背后的值。 ()只是用于计算表达式,并且计算表达式的结果将传递给调用函数(如何依赖于编译器实现)。

这当然也没有功能,只要想一想:你会如何从回归中回归?

答案 4 :(得分:4)

“return”既不是常规也不是操作员。

它转换为众所周知的汇编指令。例如,在x86架构上,它转换为“ret”,而在PowerPC架构上,它转换为“blr”。

对于它返回的值,编译器在发出返回指令之前将该值移动到适当的寄存器中。在x86架构上,如果需要,这通常是EAX和EDX - 对于x86-64,寄存器会略有变化。在PPC上,如果记忆服务,那就是r1 - 如果我在这个细节上错了,其他人可能会纠正我。

希望这有帮助。

答案 5 :(得分:2)

'true' is an Expression, 
'(true)' is an Expression. 

return后面总是可以跟一个表达式,但是对于返回类型检查,表达式必须具有相同类型的函数返回类型。

hense你可以通过说

来概括它
return Expression. 

(在具有void返回类型的函数中,return可能后面没有表达式;裸return只会退出该函数。)

答案 6 :(得分:0)

“在古代预先标准版本的C(例如CRM C)中存在围绕返回参数放置()的要求,但很快被消除了,尽管将多余的论证包含在多余的古怪习惯中()今天甚至可以看到。“

是的,你知道你正在看一些旧的代码,或者有人认为当你看到它们一直使用parens时,return就是一个函数。 我的大学导师做到了这一点,它一直让我烦恼。 哦,至少他是一贯的。