8

我需要使用 pthreat 但我不需要将任何参数传递给函数。因此,我将 NULL 传递给 pthread_create 上的函数。我有 7 个 pthread,所以 gcc 编译器警告我有 7 个未使用的参数。如何将这 7 个参数定义为 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;
}
4

5 回答 5

18

您可以将参数转换为void

void *timer1_function(void * parameter1) {
  (void) parameter1; // Suppress the warning.
  // <statement>
}
于 2012-04-30T21:52:52.507 回答
18

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

void *timer1_function(__attribute__((unused))void *parameter1)
于 2012-04-30T21:59:17.307 回答
2

两种常用的技术:

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

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

2)注释掉参数名:

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

- 克里斯

于 2013-02-21T23:29:51.020 回答
1

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

于 2012-04-30T21:57:34.017 回答
0

在函数体中不使用参数是完全可以的。

为避免编译器警告(如果您的实现中有),您可以这样做:

void *timer1_function(void * parameter1)
{
    // no operation, will likely be optimized out by the compiler
    parameter1 = parameter1;  
}
于 2012-04-30T21:54:53.010 回答