在C中定义未使用的参数

时间:2012-04-30 21:47:03

标签: c gcc pthreads posix

我需要使用pthreat但我不需要将任何参数传递给函数。因此,我将NULL传递给pthread_create上的函数。我有7个pthreads,所以gcc编译器警告我有7个未完成的参数。如何在C编程中将这7个参数定义为未使用?如果我没有将这些参数定义为未使用,是否会导致任何问题?提前感谢您的回复。

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;
}

5 个答案:

答案 0 :(得分:18)

您可以将参数转换为void,如下所示:

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

答案 1 :(得分:17)

GCC有一个“属性”工具,可用于标记未使用的参数。使用

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

答案 2 :(得分:2)

默认情况下,GCC不会产生此警告,即使使用-Wall也不会。我认为当您无法控制环境时可能需要在其他问题中显示的解决方法,但如果您这样做,只需删除标记(-Wunused-parameter)。

答案 3 :(得分:1)

两种常用技术:

1)省略未使用参数的名称:

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

2)注释掉参数名称:

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

- 克里斯

答案 4 :(得分:0)

完全没有在函数体中使用参数。

要避免编译器警告(如果您的实现中有任何警告),您可以执行以下操作:

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