2010-10-11 30 views
4

我遇到了一些代码,它围绕着圆括号中方法/函数的返回值。将返回值放在C/Objective-C中的括号中的意图是什么?

这是干什么的?

我看到的代码拍摄了一张图片,调整了大小,然后将其返回。

- (UIImage *)resizeImage:(UIImage *)image 
{ 
    // 
    // some fascinating, but irrelevant, resizing code here 
    // 

    return (image); 
} 
+4

人们喜欢做'return'看起来像一个函数调用?谷歌风格指南说,他们感到羞愧:http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Return_Values – 2010-10-11 13:49:57

+2

@尼克T:我曾经遇到一个人,认为返回_was_函数... – 2010-10-11 16:05:48

+0

@Nick T :这个建议存在一些问题。 1)这是一个C++风格的指南。 @)除非你在谷歌工作,否则它可能会有一些不好的一般建议(对于一般C++来说,对谷歌代码不好)。 – 2010-10-11 20:00:11

回答

5

至少就C而言,它没有区别。 parens不是必需的,但它们不会改变return语句的含义。返回语句的语法是

 
return-statement: 
    returnexpressionopt; 

表达的制作之一非末端是一个括号的表达式,或表达

4

没有。这完全没用。

它覆盖了运算符的优先级,但没有运算符的优先级比“return”低。

+2

你的意思是,没有一个操作符的*优先级低于'return'。哪一个不是操作员... – 2010-10-11 13:37:14

+0

谢谢,更正 – Tomas 2010-10-11 13:38:19

1

简短的回答很简单,它是一种风格的选择,喜欢用“/ *意见* /”而不是“//注释”

+1

''//注释并不是一种真正的样式选择,因为它们自C99开始就被允许。如果您针对旧标准进行编程,如果您想编写符合要求的代码,最好不要使用它们。 – Secure 2010-10-11 15:06:32

+0

我觉得编译器我用甚至没有抱怨,当你编译'/ /'注释与严格的ANSI标志设置(C89是默认的,C99不是真的支持) – 2010-10-11 20:06:55

+0

@Nick:通常ANSI语义标志是独立的来自所有警告标志。 – Potatoswatter 2010-10-12 00:30:41

0

你的情况就相当于没有输入括号的回报。通常,您可以使用圆括号进行类型转换,或者如果您想将表达式视为独立块。

例如:

// This is an untyped pointer to an instance of SomeClass 
void* ptr = instance; 

// In order to let the compiler know that ptr is an instance of SomeClass 
// we cast it, and then we put the cast in parentheses to be able to access 
// a property on the result of the cast. 
return ((SomeClass *)ptr).someproperty; 
+0

你不需要用' - >'代替'.'吗?最后有'''? – Arun 2010-10-11 17:29:42

+0

'x-> y'与'(* x).y'是同义的,所以你可以双重解引用。我不确定如何转换成员可以使用成员访问,但'((SomeClass)ptr) - > someproperty'可能工作 – 2010-10-11 20:14:54

+0

在Obj-C中,您可以在访问属性时使用点语法。所以[code]((SomeClass *)ptr).someproperty; [/ code]相当于[code] [(SomeClass *)ptr someproperty]; [/ code] 而且,我忘了分号:) – Splashdust 2010-10-12 00:22:36

相关问题