2010-03-12 3 views
28

Возможные Дубликаты:
Optional arguments in Objective-C 2.0?
Objective-C Default Argument ValueОбъектив C Параметры по умолчанию?

Я пишу функцию C в Objective 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?

+1

Дубликат http://stackoverflow.com/questions/871796/objective-c-default-argument-value и/или http://stackoverflow.com/questions/561185/optional-arguments-in-objective-c -2-0, я считаю. –

+0

Первый из них менее полезен, потому что каждый либо ответил на вызов метода, либо неверный оператор, который может иметь две функции foo. Второй - это все вызовы методов ... –

ответ

89

В ObjC нет параметров по умолчанию.

Вы можете создать 2 метода, хотя:

-(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: нет ничего особенного добавлено к C подмножества с помощью ObjC. Все, что невозможно сделать в чистом C, невозможно сделать, скомпилировав в ObjC. Это означает, что вы не можете иметь параметры по умолчанию и не перегружать функцию. Вместо этого создайте 2 функции.

+5

+1 это правильный путь. :) То же самое, если вам действительно нужна функция C: используйте разные имена. – Macmade

+0

@macmade да 'это то, что я сейчас делаю ... Я просто думаю, что стиль по умолчанию C++ делает код немного чистым ... –

+0

@ Kenny, да, но это действительно не относится к какому-либо классу. это действительно автономная функция C ... –

1

Для функции C - нет. Для метода класса Objective C - да, вы просто выполняете два метода, один из которых один параметр короткий, вызывающий другой метод.

Или вы можете переименовать свои источники в функции .mm и C, магически стать C++.

+0

Это интересная возможность ... Я ' вам придется выяснить стоимость этого в других частях моей интеграции ... –

+0

Обратите внимание, что это изменяет оформление глобального имени. Вы не сможете вызвать такую ​​функцию из внешнего источника .m/.c; если есть способ объявить функцию как «extern C++», так сказать, я не знаком с ней. Другими словами, если вы идете в ObjC++, вам лучше сделать это во всем проекте. –

1

Вы можете написать функцию C с переменным списком длины аргумента. Вы можете использовать «...» в качестве типа данных для одного из объявленных параметров вашей функции, чтобы указать, где в списке параметров начинается список аргументов переменных. (Это позволяет вам иметь один или несколько обязательных аргументов до начала списка.)

printf() - это пример функции, которая записывается с использованием этого средства (так называемые varargs).

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

Здесь необходим первый аргумент, после чего может следовать ноль или более дополнительных аргументов.

Если вы написали свою функцию таким образом, она может предоставить значение по умолчанию для отсутствующего параметра.

Смежные вопросы