определение неиспользуемых параметров в C

Мне нужно использовать pthreat, но мне не нужно передавать какой-либо аргумент функции. Поэтому я передаю NULL функции на pthread_create. У меня есть 7 pthreads, поэтому компилятор 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;
}

5 ответов


Вы можете привести параметр к void такой:

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

GCC имеет средство "атрибуты", которое можно использовать для маркировки неиспользуемых параметров. Использовать

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

по умолчанию GCC не выдает это предупреждение, даже с-Wall. Я думаю, что обходной путь, показанный в другом вопросе, может потребоваться, когда у вас нет контроля над средой, но если вы это сделаете, просто удалите флаг (-Wunused-parameter).


Это прекрасно, не используя параметр в теле функции.

чтобы избежать предупреждения компилятора (если таковое имеется в вашей реализации), вы можете сделать следующее:

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

два часто используемых методов:

1) опустить имя неиспользуемого параметра:

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

2) прокомментируйте имя параметра:

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

-- Крис