2012-04-30 23 views
7

Necesito usar pthreat pero no necesito pasar ningún argumento a la función. Por lo tanto, paso NULL a la función en pthread_create. Tengo 7 subprocesos, por lo que el compilador gcc me advierte que tengo 7 parámetros sin usar. ¿Cómo puedo definir estos 7 parámetros como no utilizados en la programación C? Si no defino estos parámetros como no utilizados, ¿causaría algún problema? Gracias de antemano por las respuestas.definiendo parámetros no utilizados en C

void *timer1_function(void * parameter1){ 
//<statement> 
} 

int main(int argc,char *argv[]){ 
    int thread_check1; 
    pthread_t timer1; 
    thread_check1 = pthread_create(&timer1, NULL, timer1_function, NULL); 
    if(thread_check1 !=0){ 
     perror("thread creation failed"); 
     exit(EXIT_FAILURE); 
    } 
while(1){} 
return 0; 
} 
+0

Si no se utilizan, implica th sin operaciones significativas se llevan a cabo esas variables, y (en su mayor parte) son seguros para deshacerse de ellos. Es una advertencia, no un error, por lo que * puede * ser ignorado. Por lo general, no es una buena idea * * ignorarlo, pero usted * puede *. – Makoto

+0

@hmjd - C++ lo permite, no C. – MByD

+2

http://stackoverflow.com/q/7090998/168175 – Flexo

Respuesta

17

puede convertir el parámetro a void así:

void *timer1_function(void * parameter1) { 
    (void) parameter1; // Suppress the warning. 
    // <statement> 
} 
+3

http://stackoverflow.com/a/4851173/168175 tiene una forma alternativa que funciona mejor para 'volátil' aparentemente – Flexo

+0

Clever - ¡gracias! –

0

Es perfectamente bien no se utiliza un parámetro en un cuerpo de la función.

Para evitar la advertencia del compilador (si lo hay en su aplicación), se puede hacer esto:

void *timer1_function(void * parameter1) 
{ 
    // no operation, will likely be optimized out by the compiler 
    parameter1 = parameter1; 
} 
2

Por defecto, GCC no produce esta advertencia, ni siquiera con -Wall. Creo que la solución que se muestra en otra pregunta puede ser necesaria cuando no tiene control sobre el medio ambiente, pero si lo hace, simplemente elimine la marca (-Wunused-parameter).

+0

+1 esta es la mejor solución. Esta advertencia es fundamentalmente idiota. Siempre que se toma la dirección de una función, GCC debe desactivar las advertencias de "parámetros no utilizados", ya sea que se usen internamente o no, se usan como parte de la interfaz requerida para la función. Personalmente, diría que lo mismo debería aplicarse a todas las funciones externas también ... –

+2

@R He detectado un error en mi código hace unos días gracias a esta advertencia. Estaba haciendo un refactor de algunas funciones y escribí 0 en lugar del identificador de una máscara de bits que entró como parámetro de función. Habilitar -Wextra me permitió corregir de inmediato un error sutil que se había introducido hace días. –

+2

-1: regularmente encuentro errores gracias a que esta advertencia se activó. –

17

GCC tiene una función de "atributos" que se puede usar para marcar los parámetros no utilizados. Utilice

void *timer1_function(__attribute__((unused))void *parameter1) 
1

Dos técnicas utilizadas comúnmente:

1) omitir el nombre del parámetro no utilizado:

void *timer1_function(void *) { ... } 

2) Comentarios a cabo el nombre del parámetro:

void *timer1_function(void * /*parameter1*/) { ... } 

- - Chris

Cuestiones relacionadas