2010-01-29 20 views
17
#include <stdio.h> 

int main() 
{ 
    int a = 4; 
    int b = 3; 
    addNumbers(a, b); 
} 

int addNumbers(int a, int b) 
{ 
    return a + b; 
} 

यह संकलित क्यों नहीं करता है, मुझे एक संदेश मिलता है जो फ़ंक्शन addNumbers() की निहित घोषणा कहता है?"फ़ंक्शन की निहित घोषणा" का क्या अर्थ है?

+0

मुख्य पहले समारोह addNumbers घोषित करने के अलावा, यहां मेरी सी शैली के बारे में 2 सेंट (सी के लिए लागू नहीं ++) कर रहे हैं: 1) फ़ंक्शन जिसमें कोई पैरामीटर नहीं है, हस्ताक्षर (शून्य) होना चाहिए - और इस प्रकार 'int मुख्य (शून्य)'; 2) मुख्य को सी में मूल्य वापस करना चाहिए - इस प्रकार 'वापसी 0' अनिवार्य है। –

+0

तो मैं इसे कैसे प्रिंट कर सकता हूं, जैसे कि जब मैं इसे चलाता हूं तो यह कुछ भी नहीं दिखाता है, मैंने मुख्य रूप से sumf को printf (addNumbers (a, b)) पर लौटने की कोशिश की है; लेकिन – bob

+0

का कोई फायदा नहीं हुआ यह एक और सवाल है। मुझे यकीन है कि अगर आप stackoverflow.com पर खोज का उपयोग करते हैं तो आपको एक उत्तर मिल सकता है – sharptooth

उत्तर

8

आपको इसे मुख्य() में कॉल करने से पहले फ़ंक्शन घोषित करने की आवश्यकता है। या तो इसे मुख्य से पहले ले जाएं या कम से कम इसे वहां घोषित करें। इसके अलावा, आपको मुख्य फ़ंक्शन के अंत में return 0 जोड़ने की जांच करनी चाहिए क्योंकि इसे int वापस करना है।

#include <stdio.h> 

int addNumbers(int a, int b) 
{ 
    return a + b; 
} 

int main() 
{ 
    int a = 4; 
    int b = 3; 
    addNumbers(a, b); 
    return 0; 
} 
+1

@ruibm: _ इसके अलावा, आपको मुख्य फ़ंक्शन के अंत में रिटर्न 0 जोड़ना चाहिए क्योंकि इसे int_ वापस करना है: ** नहीं ** वैकल्पिक –

+2

हाँ, मुझे पता है कि यह है, लेकिन यह एक अच्छा प्रोग्रामिंग अभ्यास है और यदि आप पैडेंटिक मोड चालू करते हैं तो संकलक समस्या चेतावनियों की जांच करेगा। – rui

+0

आगे नाइटपिकिंग, सी में यह एक "कार्य" है, न कि "विधि"। अन्यथा अच्छा है। – Vatine

6

आप या तो ले जाने के मुख्य ऊपर पूरे addNumber() समारोह या एक प्रोटोटाइप प्रदान करने के लिए है। इससे पहले मुख्य

int addNumbers(int a, int b) 
{ 
    return a + b; 
} 

int main() 
{ 
    int a = 4; 
    int b = 3; 

    addNumbers(a, b); 
} 

अद्यतन

int addNumbers(int a, int b); 

int main() 
{ 
// code of main() here 
} 

int addNumbers(int a, int b) 
{ 
//code of addNumbers() here 
} 
4

रखें addNumbers: उत्तरार्द्ध निम्नलिखित तरीके से किया जाता है

इसे प्रिंट करने के लिए, printf("%i",addNumbers(a, b)); उपरोक्त मामले में 7 प्रदर्शित करेगा।

19

या तो main() से पहले फ़ंक्शन को परिभाषित करें या main() से पहले इसका प्रोटोटाइप प्रदान करें।

#include <stdio.h> 

int addNumbers(int a, int b) 
{ //definition 
} 

int main() 
{ //Code in main 
    addNumbers(a, b); 
} 

या इस:

int addNumbers(int a, int b); 

या:

#include <stdio.h> 

int addNumbers(int, int); 
int main() 
{ //Code in main 
    addNumbers(a, b); 
} 

int addNumbers(int a, int b) 
{ // definition 
} 
+0

एक साइड नोट के रूप में, सामान्य रूप से .h फ़ाइल में किए गए फ़ंक्शन घोषणाएं नहीं होती हैं? – Powerlord

+1

@ आर। Bemrose: जब एक से अधिक स्रोत फ़ाइल है, हाँ। जब यहां केवल एक स्रोत फ़ाइल होती है, तो फ़ंक्शन को स्थैतिक फ़ंक्शन के रूप में घोषित किया जाना चाहिए (क्योंकि इसे किसी अन्य फ़ाइल से एक्सेस करने की आवश्यकता नहीं है, क्योंकि संकलन करने के लिए केवल एक फ़ाइल है)। –

1

या तो पहले मुख्य() एक प्रोटोटाइप जोड़कर उपयोग करने से पहले समारोह घोषित

तो या तो ऐसा करने मुख्य() से पहले पूरे addNumbers फ़ंक्शन को ले जाएं।

2

आप बिंदु जहां यह कहा जाता है ऊपर पूरे समारोह स्थानांतरित कर सकते हैं, या का उपयोग एक समारोह प्रोटोटाइप, इस तरह:

#include <stdio.h> 

int addNumbers(int a, int b); // function prototype 

int main() 
{ 
    int a = 4; 
    int b = 3; 
    addNumbers(a, b); 
} 

int addNumbers(int a, int b) 
{ 
    return a + b; 
} 
+0

व्यवहार अपरिभाषित है। मानकों के अनुसार: आपको उपयोग करने से पहले फ़ंक्शन घोषित करना होगा। –

2

आप addNumbers समारोह के आगे घोषणा की आवश्यकता होगी या अपनी परिभाषा ऊपर ले जाया गया सर्वप्रथम प्रयोग से पहले:

// 2161304 
#include <stdio.h> 

// forward declaration 
int addNumbers(int a, int b); 

int main() 
{ 
    int a = 4; 
    int b = 3; 
    addNumbers(a, b); 
} 

// alternatively move this up before main ... 
int addNumbers(int a, int b) 
{ 
    return a + b; 
} 

main और return के बारे में:

कार्यक्रम होगा बिना संकलित करें। मुख्य के हस्ताक्षर मानक द्वारा परिभाषित कर रहे हैं:

0, EXIT_SUCCESS, EXIT_FAILURE 

जो stdlib.h में परिभाषित कर रहे हैं:

int main(void) 
int main(int argc, char **argv) 

तीन पोर्टेबल वापसी मान नहीं होता।

0

यदि आपका कंपाइलर सी 99 मानक है तो यह फेंकता है और "निहित घोषणा" त्रुटि करता है, क्योंकि चूंकि डिफ़ॉल्ट प्रचार सी 99 मानक में अप्रचलित है। यदि आप C89 मानक के साथ संकलित करने का प्रयास करते हैं तो यह स्वीकार्य होगा।

C99 मानक समारोह प्रोटोटाइप में आवश्यक

0

है के बाद से संकलक एक के बाद एक लाइन कार्यान्वित करता है, समय इसे देखता समारोह कॉल के द्वारा, यह है कि समारोह जो मुख्य कार्य calling.so है के बारे में जानकारी होना आवश्यक है मेरे दोस्त को आप इसे कभी भी इस्तेमाल करने से पहले फ़ंक्शन के बारे में कंपाइलर को बताने की ज़रूरत है।

1

मैं घोषणा और परिभाषा चीज़ से सहमत हूं लेकिन मुझे उपरोक्त कोड के साथ कोई संकलन त्रुटियां नहीं मिल रही हैं। मेरा जीसीसी संस्करण "4.4.1-4ubuntu9" है। कुछ विचार।

मैंने कोड का परीक्षण करने के लिए थोड़ा संशोधन किया है।

#include <stdio.h> 

int main() 
{ 
    int a = 4; 
    int b = 3; 
    printf("%d", addNumbers(a, b)); // Printf added. 
} 

int addNumbers(int a, int b) 
{ 
    return a + b; 
} 
0

आपको उपयोग करने से पहले फ़ंक्शन घोषित करना होगा। कार्यों से निपटने के दौरान इन 4 मूल भागों को याद रखें।

  1. घोषणा
  2. कॉल
  3. परिभाषा
  4. वापसी
संबंधित मुद्दे