views:

605

answers:

5

Possible Duplicates:
Optional arguments in Objective-C 2.0?
Objective-C Default Argument Value

I'm writing a C function in Objective C. I want a default value for my last parameter.

I've tried:

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

but that's C++

I've also tried

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

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

But that's ALSO C++.

is there a way to do this in Objective C?

+1  A: 

No, objective-c does not support default parameters. See similar question

Vladimir
+8  A: 

There's no default parameters in ObjC.

You can create 2 methods though:

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

For C : there's nothing special added to the C subset by using ObjC. Anything that cannot be done in pure C can't be done by compiling in ObjC either. That means, you can't have default parameters, nor overload a function. Create 2 functions instead.

KennyTM
+1 that's the right way. : ) Same if you really need a C function: use different names.
Macmade
@macmade yeah' that's what I'm currently doing... I just think the C++ default style makes the code a little cleaner...
Brian Postow
@Kenny, yeah but this doesn't really belong to any class. it really is a stand alone C function...
Brian Postow
Then as Seva sugest, try Objective-C++. With that, you will be able to mix C++ and Obj-C code, calling one from the other, etc... : )
Macmade
A: 

For a C function - no. For an Objective C class method - yes, you just do two methods, one of them one parameter short, calling the other method.

Or you can rename your sources to .mm and C functions magically become C++.

Seva Alekseyev
That's an interesting possibility... I'll have to figure out the cost of that in other parts of my integration...
Brian Postow
Note that this changes global name decoration. You won't be able to call such a function externally from a .m/.c source; if there's a way to declare a function as "extern C++", so to say, I'm not familiar with it.In other words, if you're going ObjC++, you better do this throughout the project.
Seva Alekseyev
A: 

Define multiple methods:

http://stackoverflow.com/questions/561185/optional-arguments-in-objective-c-2-0

Typeoneerror
I need a straight C function, not a method.
Brian Postow
A: 

You can write a C function with a variable length argument list. You can use '...' as the data type for one of your function's declared parameters to specify where in the parameter list the variable argument list begins. (That allows you to have one or more required arguments before the start of the list.)

printf() is an example of a function that is written using this facility (known as varargs).

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

Here, the first argument is required, and then can be followed by zero or more additional arguments.

If you wrote your function this way, it could supply a default value for the missing parameter.

jlehr