Ich erwarte, dass der folgende Code Warnungen über implizite Deklaration von Funktionen erzeugen:Sind in clang 3 Nachrichten- und Funktionsprototypen nicht mehr nötig?
@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
Insbesondere würde ich Warnungen erwarten über beide bar
und baz
verwenden, bevor sie deklariert sind. (bar
würde davon ausgegangen werden id
zurückzukehren und baz
würde davon ausgegangen werden int
zurückzukehren.)
GCC zeigt beide Warnungen, wie auch LLVM des Clang 2.9. Clang 3 kann jedoch anscheinend herausfinden, dass bar
und baz
existieren und was sie zurückgeben. Keine Warnung erscheint (außer die Funktionen werden entfernt).
(Wenn baz
außerhalb der Klasse deklariert wird, tritt die Warnung immer noch. Also gilt dies nur für Objective-C!)
Awesome! Das würde eine Menge Duplikate entfernen lassen. Aber was ist los? Ist das eine Spracherweiterung? Ist es ein Compiler-Feature? Ist es ein Fehler? Oder irre ich mich damit? Ich konnte keine Dokumentation darüber finden, daher bin ich vorsichtig, mich darauf zu verlassen. Hat jemand einen Einblick?
Nimm es so wie es ist - super! Jetzt, wenn sie nur LLDB reparieren können .... –