В clang 3 больше не нужны прототипы сообщений и функций? - PullRequest
2 голосов
/ 28 марта 2012

Я ожидаю, что следующий код выдаст предупреждения о неявном объявлении функций:

@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!)

Круто! Это позволило бы удалить много дубликатов.Но что происходит?Это расширение языка?Это функция компилятора?Это ошибка?Или я ошибаюсь по этому поводу?Я не смог найти никакой документации по этому вопросу, поэтому я опасаюсь полагаться на это. У кого-нибудь есть понимание?

Ответы [ 2 ]

2 голосов
/ 25 сентября 2012

Документация по iOS 6 (теперь не в NDA) наконец-то содержит официальное признание этой функции.

Это называется «прототипы метода пересылки не нужны в блоке @implementation», требуется Xcode 4.3 (LLVM Compiler 3.1) и совместим со всеми выпусками iOS.

Индекс доступности функций Objective-C

На этой странице перечислены все последние улучшения компилятора и Objective-C, а также под какими сочетаниями они доступны.

1 голос
/ 28 марта 2012

Это появилось в списке Apple несколько недель назад.Это новая функция.Есть и другие вещи, такие как:

NSArray* myArray = @[ @"foo", @"bar", @"baz"];

как синтаксический сахар для

NSArray* myArray = [NSArray arrayWithObjects: @"foo", @"bar", @"baz", nil];

(ну, это не совсем прямой перевод).

Также ядумаю, что будет

array[i]

для

[array objectAtIndex: i];

и будут эквивалентные расширения для словарей.

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