3.6.1 Основных функций
....
2 реализация не должна предопределять эти
main
функция. Эта функция не должна быть перегружена. Это должно иметь тип возврата типаint
, но иначе его тип определяется реализацией. Все реализации должны позволить оба из следующих определений основного:int main() { /* ... */ }
и
int main(int argc, char* argv[]) { /* ... */ }
.... и это продолжает добавлять...
5 А
return
оператор вmain
имеет эффект отъезда основной функции (уничтожающий любые объекты с продолжительностью автоматического хранения) и звонящийexit
с возвращаемым значением как аргумент. , Если управление достигает концаmain
, не встречаясь с оператором возврата, эффект является эффектом выполняющегося возврата 0 ;попытка найти копию онлайн стандарта C++, таким образом, я мог заключить этот отрывок в кавычки, я нашел сообщение в блоге, которое заключает все правильные биты в кавычки лучше, чем, я мог.
Обходной путь - объявить протокол в категории без реализации и реализовать метод в другой категории, например:
@interface NSObject (SomeCategory) <SomeDelegate>
- (void)someDelegateMessage;
@end
@implementation NSObject (SomeCategory_Impl)
- (void)someDelegateMessage {}
@end
Если вы сделаете это, NSObject
будет считаться соответствующим
во время компиляции, и во время выполнения проверки для someDelegateMessage
пройдут успешно. Тем не менее, corresToProtocol:
проверки времени выполнения завершатся неудачно.
Конечно, вы должны зарегистрировать ошибку , требуя, чтобы методы, объявленные в базовом классе, не генерировали предупреждения.
Есть ли шанс, что ваше объявление протокола включает протокол NSObject
? Примерно так:
@protocol SomeDelegate <NSObject>
...
Вот откуда приходят предупреждения, потому что теперь ваша категория не реализует полный протокол. В коде теста, который я только что набрал, удаление NSObject
из протокола удаляет предупреждения компилятора.
If you want the compiler to shut up about sending
Alternately, use NSObject as your variable type instead.