2012-09-10 10 views
5

Próbuję utworzyć plik nagłówka jako takie:Weryfikacja typedef jest cechą C11

#import <UIKit/UIKit.h> 

typedef void (^RevealBlock)(); 

@interface BFTasksViewController : UITableViewController <UITableViewDataSource, UITableViewDelegate> { 
@private 
    RevealBlock _revealBlock; 
} 

- (id)initWithTitle:(NSString *)title withRevealBlock:(RevealBlock)revealBlock; 

@end 

Ale mam to ostrzeżenie:

redefinicji typedef 'RevealBlock' jest C11 funkcja

Czy należy się tym martwić? Patrzę na GHSidebarNav project, który wydaje się używać go dobrze.

Odpowiedz

5

Musisz zadeklarowały RevealBlock gdzieś indziej, jak nie widzę żadnego importować inne niż UIKit/UIKit.h sprawdzić projekcji .pch plik dla sprzecznych nagłówków (lub może być to, że usunięto niektóre nagłówki aby fragment krótszy?).

+1

Dzięki! Użyłem go więc w pliku nagłówkowym delegata aplikacji i myślę, że właśnie to spowodowało ostrzeżenie. Zamiast tego przeniosłem definicję do pliku .pch i usunąłem wszystkie inne definicje. – joslinm

3

Czy należy się tym martwić?

Jeśli kompilacji programu C lub objc i kompilator nie obsługuje C11, następnie kompilator powinien odrzucić ten program (GCC 4.2-Apple/LLVM jako przykład Ty lub ktoś za pomocą programu mogą używać) . Zauważ, że C++ obsługuje wiele definicji przez wiele lat.

Oczywiście te definicje, które pojawiają się w wielu plikach, muszą zawsze pasować do miejsc, w których używasz ich jako tego samego typu. W przeciwnym razie kompilator może niepoprawnie ustawić parametry przed wywołaniem.