我遇到了一些代码,它围绕着圆括号中方法/函数的返回值。将返回值放在C/Objective-C中的括号中的意图是什么?
这是干什么的?
我看到的代码拍摄了一张图片,调整了大小,然后将其返回。
- (UIImage *)resizeImage:(UIImage *)image
{
//
// some fascinating, but irrelevant, resizing code here
//
return (image);
}
我遇到了一些代码,它围绕着圆括号中方法/函数的返回值。将返回值放在C/Objective-C中的括号中的意图是什么?
这是干什么的?
我看到的代码拍摄了一张图片,调整了大小,然后将其返回。
- (UIImage *)resizeImage:(UIImage *)image
{
//
// some fascinating, but irrelevant, resizing code here
//
return (image);
}
至少就C而言,它没有区别。 parens不是必需的,但它们不会改变return语句的含义。返回语句的语法是
return-statement: returnexpressionopt;
和表达的制作之一非末端是一个括号的表达式,或(表达)。
没有。这完全没用。
它覆盖了运算符的优先级,但没有运算符的优先级比“return”低。
你的意思是,没有一个操作符的*优先级低于'return'。哪一个不是操作员... – 2010-10-11 13:37:14
谢谢,更正 – Tomas 2010-10-11 13:38:19
简短的回答很简单,它是一种风格的选择,喜欢用“/ *意见* /”而不是“//注释”
''//注释并不是一种真正的样式选择,因为它们自C99开始就被允许。如果您针对旧标准进行编程,如果您想编写符合要求的代码,最好不要使用它们。 – Secure 2010-10-11 15:06:32
我觉得编译器我用甚至没有抱怨,当你编译'/ /'注释与严格的ANSI标志设置(C89是默认的,C99不是真的支持) – 2010-10-11 20:06:55
@Nick:通常ANSI语义标志是独立的来自所有警告标志。 – Potatoswatter 2010-10-12 00:30:41
你的情况就相当于没有输入括号的回报。通常,您可以使用圆括号进行类型转换,或者如果您想将表达式视为独立块。
例如:
// 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;
你不需要用' - >'代替'.'吗?最后有'''? – Arun 2010-10-11 17:29:42
'x-> y'与'(* x).y'是同义的,所以你可以双重解引用。我不确定如何转换成员可以使用成员访问,但'((SomeClass)ptr) - > someproperty'可能工作 – 2010-10-11 20:14:54
在Obj-C中,您可以在访问属性时使用点语法。所以[code]((SomeClass *)ptr).someproperty; [/ code]相当于[code] [(SomeClass *)ptr someproperty]; [/ code] 而且,我忘了分号:) – Splashdust 2010-10-12 00:22:36
人们喜欢做'return'看起来像一个函数调用?谷歌风格指南说,他们感到羞愧:http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Return_Values – 2010-10-11 13:49:57
@尼克T:我曾经遇到一个人,认为返回_was_函数... – 2010-10-11 16:05:48
@Nick T :这个建议存在一些问题。 1)这是一个C++风格的指南。 @)除非你在谷歌工作,否则它可能会有一些不好的一般建议(对于一般C++来说,对谷歌代码不好)。 – 2010-10-11 20:00:11