2011-09-08 13 views
40

Estoy leyendo este código de ejemplo del FUSIBLE:¿Qué hace (vacío) el 'nombre de variable' al comienzo de una función C?

http://fuse.sourceforge.net/helloworld.html

y estoy teniendo problemas para entender lo que el siguiente fragmento de código hace:

static int hello_readdir(const char *path, void *buf, fuse_fill_dir_t filler, 
         off_t offset, struct fuse_file_info *fi) 
{ 
    (void) offset; 
    (void) fi; 

En concreto, el (void) "nombre de variable "cosa" Nunca antes había visto este tipo de construcción en un programa C, así que ni siquiera sé qué poner en el cuadro de búsqueda de Google. ¿Mi mejor conjetura actual es que se trata de algún tipo de especificador para los parámetros de función no utilizados? Si alguien sabe qué es esto y podría ayudarme, sería genial. ¡Gracias!

+1

¿Se compilar? –

+0

Llegó aquí al leer el código del fusible: D –

Respuesta

76

Funciona alrededor de algunas advertencias del compilador. Algunos compiladores advertirán si no usa un parámetro de función. En tal caso, es posible que no haya utilizado deliberadamente ese parámetro, que no pueda cambiar la interfaz por algún motivo, pero que aún desee cerrar la advertencia. Esa construcción de fundición (void) es un no-operativo que hace que la advertencia desaparezca. Aquí hay un ejemplo simple usando sonido metálico:

int f1(int a, int b) 
{ 
    (void)b; 
    return a; 
} 

int f2(int a, int b) 
{ 
    return a; 
} 

Construir usando la bandera -Wunused-parameter y listo:

$ clang -Wunused-parameter -c -o example.o example.c 
example.c:7:19: warning: unused parameter 'b' [-Wunused-parameter] 
int f2(int a, int b) 
       ^
1 warning generated. 
+1

+1 para el ejemplo:) – Macmade

+0

¿No sería más semántico usar '#define IGNORE_UNUSED (var) (void) (var)' then? – orlp

+0

@nightcracker, no sé qué significa "más semántica", pero el uso del OP es una expresión bastante común. –

5

No hace nada, en términos de código.

Está aquí para decirle al compilador que esas variables (en ese caso los parámetros) no se utilizan, para evitar las advertencias -Wunused.

Otra manera de hacer esto es utilizar:

#pragma unused 
Cuestiones relacionadas