Objective-C函数有默认参数吗?

时间:2010-03-12 21:36:20

标签: objective-c function parameters default-value

  

可能重复:
  Optional arguments in Objective-C 2.0?
  Objective-C Default Argument Value

我正在Objective-C中编写一个C函数。我想要一个默认值作为我的上一个参数。

我试过了:

foo(int a, int b, int c = 0);

但那是C ++。

我也试过了:

foo(int a, int b, int c)
{
    ...
}

foo(int a, int b)
{
   foo(a, b, 0);
}

但那也是 C ++。

有没有办法在Objective-C中执行此操作?

5 个答案:

答案 0 :(得分:99)

ObjC中没有默认参数。

您可以创建两种方法:

-(void)fooWithA:(int)a b:(int)b c:(int)c {
  ...
}
-(void)fooWithA:(int)a b:(int)b {
  [self fooWithA:a b:b c:0];
}

对于C:使用ObjC没有为C子集添加任何特殊内容。任何无法在纯C中完成的事情都无法通过在ObjC中编译来完成。这意味着,您不能拥有默认参数,也不能重载函数。改为创建2个函数。

答案 1 :(得分:4)

不,objective-c不支持默认参数。见similar question

答案 2 :(得分:2)

答案 3 :(得分:1)

对于C函数 - 没有。对于Objective C类方法 - 是的,你只需要做两个方法,其中一个是参数short,调用另一个方法。

或者您可以将源重命名为.mm和C函数神奇地变为C ++。

答案 4 :(得分:1)

您可以使用可变长度参数列表编写C函数。您可以使用“...”作为函数声明参数之一的数据类型,以指定参数列表中变量参数列表的开始位置。 (这允许您在列表开头之前有一个或多个必需参数。)

printf()是使用此工具编写的函数示例(称为varargs)。

printf(const char *restrict format, ...);

这里,第一个参数是必需的,然后可以跟随零个或多个其他参数。

如果以这种方式编写函数,它可以为缺少的参数提供默认值。