हर बार जब मैं मॉलॉक का उपयोग करता हूं तो मुझे चेतावनी क्यों मिलती है?


110

अगर मैं mallocअपने कोड में उपयोग करता हूं:

int *x = malloc(sizeof(int));

मुझे यह चेतावनी मिली है gcc:

new.c:7: warning: implicit declaration of function malloc  
new.c:7: warning: incompatible implicit declaration of built-in function malloc

जवाबों:


224

आपको जोड़ने की आवश्यकता है:

#include <stdlib.h>

इस फ़ाइल में अंतर्निहित फ़ंक्शन के लिए घोषणा शामिल है malloc। यदि आप ऐसा नहीं करते हैं, तो संकलक को लगता है कि आप अपने स्वयं के कार्य को परिभाषित करना चाहते हैं mallocऔर यह आपको चेतावनी देता है क्योंकि:

  1. आप स्पष्ट रूप से इसकी घोषणा नहीं करते हैं और
  2. उस नाम से पहले से ही एक अंतर्निहित कार्य होता है, जिसमें एक से एक अलग हस्ताक्षर होता है जिसे स्पष्ट रूप से घोषित किया गया था (जब एक फ़ंक्शन को स्पष्ट रूप से घोषित किया जाता है, तो इसका रिटर्न और तर्क प्रकार माना जाता है int, जो अंतर्निहित के साथ संगत नहीं है- में mallocहै, जो एक लेता है size_tऔर एक रिटर्न void*)।

5
पारिभाषिक शब्दावली: सी। मॉलॉक में बिल्ट-इन फ़ंक्शन के रूप में ऐसी कोई बात नहीं है, यह केवल मानक सी लाइब्रेरी से एक फ़ंक्शन है।
जेन्स

5
@ जेन्स मुझे मानक लाइब्रेरी फ़ंक्शंस के संदर्भ में कोई समस्या नहीं दिखती है जो बिल्ट-इन के रूप में है और न ही लोगों को जाहिरा तौर पर करते हैं क्योंकि त्रुटि संदेश में "बिल्ट-इन" शब्द का इस्तेमाल किया गया था, (जो कि मैंने किया था)।
sepp2k

7
@ sepp2k ठीक है, मैं ऐसा कोई समस्या देखते हैं। उपयोग गैर-मानक है। कम्पाइलर्स में बिल्ट-इन फंक्शन हो सकते हैं और gcc में मॉलॉक बिल्ट-इन हो सकता है। लेकिन जैसा कि मैंने लिखा, सी में , कोई अंतर्निहित कार्य नहीं हैं।
जेन्स


16

आपको उदाहरण के लिए फ़ंक्शन की घोषणा करने वाली हेडर फ़ाइल शामिल करने की आवश्यकता है:

#include <stdlib.h>

यदि आप इस हेडर फ़ाइल को शामिल नहीं करते हैं, तो फ़ंक्शन कंपाइलर को ज्ञात नहीं है। तो यह इसे अघोषित रूप में देखता है।


10

मदद में अपने कार्यों को देखने की आदत बनाएं।

C के लिए अधिकांश सहायता यूनिक्स मैनुअल पृष्ठों पर तैयार की गई है।

का उपयोग कर:

man malloc

बहुत उपयोगी परिणाम देता है।

googling man malloc आपको दिखाएगा कि मेरा क्या मतलब है।

यूनिक्स में आपको उन चीजों के लिए एप्रोपोस भी मिलते हैं जो संबंधित हैं।


1
केवल अगर आप पहले से ही जानते हैं कि #include <stdlib.h>सारांश में लाइन का मतलब है कि आपको अपने कार्यक्रम में लिखना होगा।
मैकेनिकल घोंघा

1
अगर किसी ने अन्य उत्तर यहां पढ़े हैं तो उन्हें अब पता चल जाएगा।
माइक कुल्स

0

अन्य बहुत अच्छे उत्तरों के अलावा, मैं थोड़ा नाइटपिक करना चाहता हूं और कुछ को कवर करना चाहता हूं जो अन्य उत्तरों में अभी तक चर्चा नहीं की गई है।


जब आप लिनक्स पर हों, उपयोग करने के लिए malloc() अपने कोड में ,

आप वास्तव में नहीं है #include <stdlib.h>

(हालांकि का उपयोग stdlib.h बहुत आम है और शायद हर गैर-खिलौना-कार्यक्रम को इसे या तो शामिल करना चाहिए क्योंकि यह उपयोगी सी मानक पुस्तकालय कार्यों और मैक्रोज़ की एक विस्तृत श्रृंखला प्रदान करता है)

आप #include <malloc.h>इसके बजाय भी कर सकते हैं ।

लेकिन कृपया ध्यान दें कि का उपयोग malloc.hपदावनत है और यह आपके कोड को गैर-पोर्टेबल बनाता है। यदि आप उपयोग करना चाहते हैं malloc()तो आपको हमेशा और हमेशा करना चाहिए (अन्यथा करने के लिए स्पष्ट कारणों को छोड़कर) #include <stdlib.h>

इस प्रश्न के उत्तर में कारण क्यों बताये गए हैं:

<stdlib.h> और <malloc.h> के बीच अंतर

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.