为什么在这种方法声明的情况下编译器会出错 -
-(void) someMethod (void);
但同意这一点——
-(void) someMethod;
(SomeClass.h)
我读过在参数中声明 (void) 比不声明更好,但我可能错过了一些观点。
为什么在这种方法声明的情况下编译器会出错 -
-(void) someMethod (void);
但同意这一点——
-(void) someMethod;
(SomeClass.h)
我读过在参数中声明 (void) 比不声明更好,但我可能错过了一些观点。
对于 Objective-C,你不能这样做。
在 Objective-C 中,每个参数都必须在:
eg之后
- (void)someMethod:(int)i;
- (void)someMethod:(int)i withString:(NSString *)string;
- (void)someMethod:(int)i :(int)i2 :(int)i3; // you can do this but is bad style
做类似的事情是没有意义的
- (void)someMethod:(void)what_goes_here;
所以如果你想要一个没有参数的方法:
- (void)someMethod;
但是,您可以在 C/C++ 中执行此操作
void someMethod(void);
而且我没有看到声明 void 参数的任何好处(明确声明事物并不总是好的)。
扩展@xlc的答案
答案是 Objective-C 和“普通”C/C++ 之间的语法差异。
追溯到 Unix 和 C 时代的起源,60 年代末/70 年代初,当声明(而不是定义)一个函数时,您不需要指定它接受多少个参数,或者它们需要什么类型。您也不需要指定它是否返回值。
后来,人们意识到这将是一个好主意,既可以在编译时更好地检测错误,也可以提高生成代码的效率。因此实现者添加了在函数声明中指定参数类型的能力。这在 80 年代后期被标准化为 ANSI C 的一部分。
但是,需要保持与现有代码的向后兼容性。foo()
因此,不能假定函数声明的意思是“没有参数的函数”。为了解决这个问题,void
引入了关键字。这使您可以说foo(void)
“不带参数的名为 foo 的函数”。
当 Objective-C 在 90 年代发明时,他们添加了一种新的语法来定义方法。因为没有遗留代码需要处理,他们只是说一个方法必须声明它的所有参数;如果没有,则该方法不接受任何参数。
不过,Objective-C 仍然使用void
关键字来指示方法不返回值。