2012-04-30 4 views
7

Мне нужно использовать 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; 
} 
+0

Если они не используются, это подразумевает без каких-либо значимых операций с этими переменными и (по большей части) они безопасны, чтобы избавиться. Это предупреждение, а не ошибка, поэтому его можно * игнорировать. Обычно это не очень хорошая идея, чтобы * игнорировать его, но вы * можете *. – Makoto

+0

@hmjd - C++ позволяет это, а не C. – MByD

+2

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

ответ

17

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

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

http://stackoverflow.com/a/4851173/168175 имеет альтернативную форму, которая лучше работает для 'volatile', видимо – Flexo

+0

Умный - спасибо! –

0

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

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

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

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

+0

+1 это лучшее исправление. Это предупреждение в основном идиотски. Всякий раз, когда адрес функции принимается, GCC должен отключать для него предупреждения «неиспользуемые параметры», поскольку независимо от того, используются ли они внутренне или нет, они используются как часть требуемого интерфейса для этой функции. Лично я бы сказал, что то же самое должно относиться ко всем внешним функциям тоже ... –

+2

@R Я поймал ошибку в своем коде несколько дней назад благодаря этому предупреждению. Я выполнял рефакторинг некоторых функций и вводил 0 вместо идентификатора для битовой маски, которая включалась в качестве параметра функции. Включение -Wextra позволило мне сразу исправить тонкую ошибку, которая была введена несколько дней назад. –

+2

-1: Я регулярно обнаруживаю ошибки благодаря активации этого предупреждения. –

17

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

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

Два широко используемых методов:

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

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

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

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

- - Chris

Смежные вопросы