Я ожидаю, что следующий код для получения предупреждений о неявном объявлении функций:Не нужны ли прототипы сообщений и функций в clang 3?
@interface TestClass : NSObject
@end
@implementation TestClass
- (void)foo {
NSString *test = [self bar];
NSLog(@"%@", test);
test = baz();
NSLog(@"%@", test);
}
- (NSString *)bar {
return @"bar";
}
NSString *baz() {
return @"baz";
}
@end
В частности, я бы ожидать предупреждения об использовании как bar
и baz
, прежде чем они объявлены. (bar
бы предположить, чтобы вернуться id
и baz
бы предположить, чтобы вернуться int
.)
GCC показывает как предупреждения, так же как и в LLVM Clang 2.9. Однако Clang 3, по-видимому, может обнаружить, что существуют bar
и baz
и что они возвращают. Не появляется предупреждение (если функции не удалены).
(Когда baz
объявлен вне класса, предупреждение по-прежнему происходит. Таким образом, это относится только к Objective-C!)
Awesome! Это позволит удалить много дубликатов. Но что происходит? Является ли это расширением языка? Это функция компилятора? Это ошибка? Или я ошибаюсь об этом? Я не мог найти документацию по этому поводу, поэтому я опасаюсь полагаться на это. У кого-нибудь есть понимание?
Просто возьмите это как есть - удивительный! Теперь, если они могут просто исправить LLDB .... –