मेरा संकलक (GCC) मुझे चेतावनी दे रहा है:
चेतावनी: फ़ंक्शन की अंतर्निहित घोषणा
कृपया मुझे यह समझने में मदद करें कि यह क्यों आ रहा है।
मेरा संकलक (GCC) मुझे चेतावनी दे रहा है:
चेतावनी: फ़ंक्शन की अंतर्निहित घोषणा
कृपया मुझे यह समझने में मदद करें कि यह क्यों आ रहा है।
जवाबों:
आप एक फ़ंक्शन का उपयोग कर रहे हैं जिसके लिए कंपाइलर ने अभी तक एक घोषणा (" प्रोटोटाइप ") नहीं देखी है ।
उदाहरण के लिए:
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);
सही तरीका है हेडर में फ़ंक्शन प्रोटोटाइप की घोषणा करना।
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
}
जब आप अपने #includes को main.c में करते हैं, तो #include संदर्भ को उस फ़ाइल में डालें जिसमें शामिल सूची के शीर्ष पर संदर्भित फ़ंक्शन है। उदा। यह कहो कि यह मुख्य है और आपका संदर्भित कार्य "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
उपरोक्त "फ़ंक्शन के निहित घोषणा" त्रुटि उत्पन्न नहीं करेगा, लेकिन नीचे होगा-
#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"
बिल्कुल वही #include सूची, बस अलग क्रम।
खैर, यह मेरे लिए किया था।
जब आप error: implicit declaration of function
इसे प्राप्त करते हैं तो यह भी अपमानजनक कार्य को सूचीबद्ध करना चाहिए। अक्सर यह त्रुटि एक भूली हुई या गुम हेडर फ़ाइल के कारण होती है, इसलिए शेल प्रॉम्प्ट पर आप टाइप कर सकते हैं man 2 functionname
और SYNOPSIS
शीर्ष पर स्थित अनुभाग को देख सकते हैं , क्योंकि यह अनुभाग उन हेडर फ़ाइलों को सूचीबद्ध करेगा जिन्हें शामिल करने की आवश्यकता है। या http://linux.die.net/man/ का प्रयास करें। यह ऑनलाइन मैन पेज हैं जो वे हाइपरलिंक हैं और खोजना आसान है। हेडर फ़ाइलों में फ़ंक्शंस को अक्सर परिभाषित किया जाता है, जिसमें किसी भी आवश्यक हेडर फ़ाइलों को शामिल करना अक्सर उत्तर होता है। जैसे जातिनेतार ने कहा,
आप एक फ़ंक्शन का उपयोग कर रहे हैं जिसके लिए कंपाइलर ने अभी तक एक घोषणा ("प्रोटोटाइप") नहीं देखी है।
आप सही हेडर परिभाषित और एक गैर का उपयोग कर रहे है, तो GlibC
पुस्तकालय (जैसे Musl सी ) gcc
भी फेंक देते हैं error: implicit declaration of function
जब जीएनयू एक्सटेंशन जैसे malloc_trim
सामना होता है।
समाधान एक्सटेंशन और हेडर को लपेटने के लिए है :
#if defined (__GLIBC__)
malloc_trim(0);
#endif
मुझे लगता है कि प्रश्न 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
के रूप में __typeof__()
इसके बजाय उपयोग करने के लिए प्रयास करें । भी gcc ... -Dtypeof=__typeof__ ...
मदद कर सकता है।