2012-04-30 11 views
7

pthreatを使用する必要がありますが、関数に引数を渡す必要はありません。したがって、私はpthread_createの関数にNULLを渡します。私は7つのpthreadを持っているので、gccコンパイラは私に7つのパラメータがないことを警告します。どのようにしてこれらの7つのパラメータをCプログラミングで未使用として定義できますか?これらのパラメータを未使用と定義していない場合、問題はありますか?事前にお返事ありがとうございます。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

Clever - ありがとう! –

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には、未使用のパラメータをマークするために使用できる「属性」機能があります。未使用のパラメータの名前を省略し

1):

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

一般に使用される2つの技術を使用し

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

2)パラメータ名コメントアウト:

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

を - - Chris

関連する問題