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)
...
}