सी

2012-04-30 10 views
7

में अप्रयुक्त पैरामीटर को परिभाषित करने के लिए मुझे पाथ्रेट का उपयोग करने की आवश्यकता है लेकिन मुझे फ़ंक्शन में कोई तर्क देने की आवश्यकता नहीं है। इसलिए, मैं pthread_create पर फ़ंक्शन पर NULL पास करता हूं। मेरे पास 7 pthreads हैं, इसलिए जीसीसी संकलक मुझे चेतावनी देता है कि मेरे पास 7 अनुसूचित पैरामीटर हैं। सी प्रोग्रामिंग में अप्रयुक्त के रूप में मैं इन 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; 
} 
+0

यदि वे अप्रयुक्त हैं, तो इसका मतलब है उन चरों पर कोई सार्थक संचालन नहीं किया जाता है, और (अधिकांश भाग के लिए) वे छुटकारा पाने के लिए सुरक्षित हैं। यह एक चेतावनी है, एक त्रुटि नहीं, इसलिए इसे अनदेखा किया जा सकता है। आमतौर पर यह एक अच्छा विचार नहीं है * इसे अनदेखा करें, लेकिन आप * कर सकते हैं। – Makoto

+0

@hmjd - 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 का एक वैकल्पिक रूप है जो 'अस्थिर' के लिए बेहतर काम करता है जाहिर है – Flexo

+0

चालाक - धन्यवाद! –

0

यह एक समारोह शरीर में एक पैरामीटर का उपयोग नहीं बिल्कुल ठीक है।

संकलक चेतावनी (यदि आपके क्रियान्वयन में किसी भी) से बचने के लिए, आप यह कर सकते हैं:

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

डिफ़ॉल्ट रूप से, जीसीसी भी नहीं -Wall के साथ इस चेतावनी का उत्पादन नहीं करता,। मुझे लगता है कि जब आपके पास पर्यावरण पर कोई नियंत्रण नहीं है, तो अन्य प्रश्नों में दिखाए गए कामकाज की आवश्यकता हो सकती है, लेकिन यदि आप करते हैं, तो ध्वज हटाएं (-Wunused-parameter)।

+0

+1 यह सबसे अच्छा तय है। यह चेतावनी मूल रूप से बेवकूफ है। जब भी किसी फ़ंक्शन का पता लिया जाता है, तो जीसीसी को इसके लिए "अप्रयुक्त पैरामीटर" चेतावनियां बंद करनी चाहिए, क्योंकि इन्हें आंतरिक रूप से उपयोग किया जाता है या नहीं, वे फ़ंक्शन के लिए आवश्यक इंटरफ़ेस के हिस्से के रूप में उपयोग किए जाते हैं। निजी तौर पर मैं कहूंगा कि वही बात सभी बाहरी कार्यों पर भी लागू होनी चाहिए ... –

+2

@ आर मैंने कुछ दिनों पहले इस चेतावनी के लिए मेरे कोड में एक बग पकड़ा था। मैं कुछ कार्यों का एक रिफैक्टर कर रहा था और एक बिटमास्क के लिए पहचानकर्ता के बजाय 0 टाइप किया जो फ़ंक्शन पैरामीटर के रूप में आया था। सक्षम करने - वर्क्त्रा ने मुझे एक सूक्ष्म बग को तुरंत ठीक करने की अनुमति दी जो कि पहले दिन पेश किया गया था। –

+2

-1: इस चेतावनी को सक्रिय करने के लिए मुझे नियमित रूप से बग मिलते हैं। –

17

जीसीसी में "विशेषताएँ" सुविधा है जिसका उपयोग अप्रयुक्त पैरामीटर को चिह्नित करने के लिए किया जा सकता है।

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

दो आमतौर पर इस्तेमाल किया तकनीकों का प्रयोग करें:

1) अप्रयुक्त पैरामीटर का नाम छोड़ दें:

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

2) पैरामीटर नाम बाहर टिप्पणी:

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

- - क्रिस