usos sistema programacion origen operativo lenguaje caracteristicas apple objective-c gcc

objective c - sistema - Usar el atributo GCC__unused con Objective-C



swift versions (5)

¿Es posible utilizar la macro del atributo __unused en los parámetros del método del objeto Objective-C? Intenté ubicarlo en varias posiciones alrededor de la declaración del parámetro pero causa un error de compilación o parece ser ignorado (es decir, el compilador todavía genera advertencias de parámetros no utilizados cuando compila con -Wall -Wextra).

¿Alguien ha podido usar esto? ¿Simplemente no es compatible con Objective-C? Como referencia, actualmente estoy usando la compilación de GCC 4.0.1 de Apple.


Creo que puedes usar #pragma sin usar para marcar argumentos como no utilizados. No probado, pero puedes intentar algo como

- (NSString *)test:(NSString *)test { #pragma unused (test); return nil; }


De acuerdo, encontré la respuesta ... parece ser un error con la implementación de gcc 4.0 de Apple. El uso de gcc 4.2 funciona como se esperaba y la ubicación adecuada es la siguiente:

-(void)someMethod:(id) __unused someParam;

Está documentado en las notas de la versión de Objective-C si alguien está interesado: http://developer.apple.com/releasenotes/Cocoa/RN-ObjectiveC/index.html#//apple_ref/doc/uid/TP40004309-DontLinkElementID_6

Como nota, su respuesta compilará, Louis, pero como dije en mi pregunta, en realidad no hará nada ni suprimirá la advertencia no utilizada emitida por el compilador.

EDITAR: He archivado un informe de error con apple para este rdar: // 6366051 .


Puedo compilar lo siguiente muy bien:

- (NSString *) test:(__unused NSString *)test { return nil; }

Editar: En realidad, eso puede no ser estrictamente una cosa de arco:

Phoenix-VI:CouchPusher louis$ cc -c Pusher.m -Wall -Werror Phoenix-VI:CouchPusher louis$ cc -c Pusher.m -Wall -Werror -Wunused-parameter cc1obj: warnings being treated as errors Pusher.m:40: warning: unused parameter ‘test’ Phoenix-VI:CouchPusher louis$

Entonces -Wall no incluye, no incluye -Wunused-parameter ....


Una expresión común es usar lo siguiente:

#define UNUSED(x) (void)x void SomeFunction(int param1, int param2) { UNUSED(param2); // do stuff with param1 }

La UNUSED(param2) no genera ningún código de objeto, elimina las advertencias sobre variables no utilizadas y documenta claramente el código como no usar la variable.


Después de luchar con #pragma por un tiempo, descubrí que es

+ (NSString*) runQuery:(id)query name:(NSString*)name options:(NSDictionary*)options { #pragma unused(name) ... }