मेरे संकलक (जीसीसी) मेरे चेतावनी दे रहा है:चेतावनी: समारोह के निहित घोषणा
चेतावनी: समारोह के निहित घोषणा
कृपया मेरी मदद क्यों यह आ रहा है।
मेरे संकलक (जीसीसी) मेरे चेतावनी दे रहा है:चेतावनी: समारोह के निहित घोषणा
चेतावनी: समारोह के निहित घोषणा
कृपया मेरी मदद क्यों यह आ रहा है।
आप एक फ़ंक्शन का उपयोग कर रहे हैं जिसके लिए कंपाइलर ने घोषणा नहीं देखी है ("प्रोटोटाइप") अभी तक।
उदाहरण के लिए:
int main()
{
fun(2, "21"); /* The compiler has not seen the declaration. */
return 0;
}
int fun(int x, char *p)
{
/* ... */
}
आप, मुख्य समारोह से पहले अपने घोषणा करने के लिए इस तरह, या तो सीधे या एक शीर्ष लेख में की जरूरत है:
int fun(int x, char *p);
जैसा एक अतिरिक्त अगर आपने प्रोटोटाइप दिया है तो यह जांच करें कि यह सिर्फ एक टाइपो नहीं है। अगर बाहरी पुस्तकालय से यह भी जांच लें कि आपने इसे शामिल किया है। – smitec
यह चेतावनी क्यों है और कोई त्रुटि नहीं है? – Flimm
मुझे यह चेतावनी मिलने के बाद कोड नहीं चलाया जा सकता है। तो यह एक त्रुटि की तरह व्यवहार करता है। – Mien
सही तरीके से शीर्षक में समारोह प्रोटोटाइप घोषित करने के लिए है ।
main.h
#ifndef MAIN_H
#define MAIN_H
int some_main(const char *name);
#endif
main.c
#include "main.h"
int main()
{
some_main("Hello, World\n");
}
int some_main(const char *name)
{
printf("%s", name);
}
एक फ़ाइल (main.c)
साथ वैकल्पिकstatic int some_main(const char *name);
int some_main(const char *name)
{
// do something
}
आप सही हेडर & परिभाषित (जैसे Musl C के रूप में) gcc
एक गैर GlibC
पुस्तकालय का उपयोग कर रहे भी error: implicit declaration of function
फेंक होगा जब इस तरह के malloc_trim
के रूप में जीएनयू एक्सटेंशन का सामना करना पड़ा रहे है।
समाधान wrap the extension & the header के लिए है:
#if defined (__GLIBC__)
malloc_trim(0);
#endif
यह भी अपमानजनक समारोह में सूचीबद्ध करना चाहिए जब आप error: implicit declaration of function
मिलता है। प्रायः यह त्रुटि भूल गई या अनुपलब्ध शीर्षलेख फ़ाइल के कारण होती है, इसलिए शेल प्रॉम्प्ट पर आप man 2 functionname
टाइप कर सकते हैं और शीर्ष पर SYNOPSIS
अनुभाग देख सकते हैं, क्योंकि यह अनुभाग किसी भी शीर्षलेख फ़ाइलों को सूचीबद्ध करने की आवश्यकता है। या http://linux.die.net/man/ आज़माएं यह ऑनलाइन मैन पेज है जो वे हाइपरलिंक्ड हैं और खोजना आसान है। फ़ंक्शंस को हेडर फ़ाइलों में अक्सर परिभाषित किया जाता है, जिसमें किसी भी आवश्यक शीर्षलेख फ़ाइलों को अक्सर उत्तर दिया जाता है। cnicutar की तरह कहा,
आप एक समारोह जिसके लिए संकलक एक घोषणा ("प्रोटोटाइप") अभी तक नहीं देखा गया है का उपयोग कर रहे हैं।
मुझे लगता है कि प्रश्न 100% उत्तर नहीं दिया गया है। मैं लापता टाइपऑफ() के साथ समस्या की तलाश कर रहा था, जो संकलन समय निर्देश है।
निम्न लिंक की स्थिति पर प्रकाश डालने देगा:
https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/Typeof.html
https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/Alternate-Keywords.html#Alternate-Keywords
conculsion के रूप में के बजाय __typeof__()
उपयोग करने के लिए प्रयास करें। gcc ... -Dtypeof=__typeof__ ...
भी मदद कर सकता है।
यह भी हो सकता है यदि आप एक हेडर फ़ाइल शामिल करना भूल जाते हैं। उदाहरण के लिए यदि आप string.h सहित बिना strlen() का उपयोग करने का प्रयास कर रहे हैं, तो आपको यह त्रुटि मिल जाएगी
जब आप मुख्य.c में अपना # शामिल करते हैं, तो उस संदर्भ में # अंतर्निहित संदर्भ डालें जिसमें संदर्भित फ़ंक्शन है सूची शामिल करने के शीर्ष। उदा। कहते हैं कि यह main.c है और अपने संदर्भित समारोह "SSD1306_LCD.h" में है
#include "SSD1306_LCD.h"
#include "system.h" #include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include <string.h>
#include <math.h>
#include <libpic30.h> // http://microchip.wikidot.com/faq:74
#include <stdint.h>
#include <stdbool.h>
#include "GenericTypeDefs.h" // This has the 'BYTE' type definition
उपरोक्त त्रुटि "समारोह का अंतर्निहित घोषणा" उत्पन्न नहीं होगा, लेकिन will-
#include "system.h"
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include <string.h>
#include <math.h>
#include <libpic30.h> // http://microchip.wikidot.com/faq:74
#include <stdint.h>
#include <stdbool.h>
#include "GenericTypeDefs.h" // This has the 'BYTE' type definition
#include "SSD1306_LCD.h"
बिल्कुल नीचे वही # शामिल सूची, बस अलग आदेश।
अच्छा, यह मेरे लिए किया गया।
ए "यह एक त्रुटि संस्करण क्यों नहीं देता है": http://stackoverflow.com/questions/434763/are-prototypes-required-for-all-functions-in-c89-c90-or-c99 –