2012-09-10 17 views
5

Estoy intentando crear un archivo de cabecera como tal:Redefinición de typedef es una característica C11

#import <UIKit/UIKit.h> 

typedef void (^RevealBlock)(); 

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

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

@end 

pero me da esta advertencia:

Redefinición de typedef 'RevealBlock' es un C11 función

¿Es esto algo de lo que preocuparse? Estoy mirando el GHSidebarNav project, que parece usarlo muy bien.

Respuesta

5

debe haber declarado RevealBlock en otro lugar, ya que no veo ninguna importación que no sea UIKit/UIKit.h, y comprueba que proyectas .pch archivo para conflictivos cabeceras (o podría ser que ha extraído algunas cabeceras para hacer que el fragmento corta ?).

+1

Gracias! Así que lo usé en el archivo de encabezado del delegado de la aplicación y creo que eso fue lo que provocó la advertencia. En cambio, moví la definición al archivo .pch y borré todas las demás definiciones. – joslinm

3

¿Es esto algo de lo que preocuparse?

Si está compilando un programa C o ObjC y el compilador no soporta C11, el compilador debe rechazar el programa (GCC 4.2 por Apple/LLVM como ejemplo usted o alguien usando su programa puede estar utilizando) . Tenga en cuenta que C++ ha admitido definiciones múltiples durante muchos años.

Por supuesto, estas definiciones que aparecen en múltiples archivos siempre deben coincidir donde los use como del mismo tipo. De lo contrario, el compilador puede configurar los parámetros incorrectamente antes de realizar la llamada.