Derleyicim (GCC) bana şu uyarıyı veriyor:
uyarı: örtük işlev bildirimi
Lütfen neden geldiğini anlamama yardımcı olun.
Derleyicim (GCC) bana şu uyarıyı veriyor:
uyarı: örtük işlev bildirimi
Lütfen neden geldiğini anlamama yardımcı olun.
Yanıtlar:
Derleyicinin henüz bir bildirim (" prototip ") görmediği bir işlev kullanıyorsunuz .
Örneğin:
int main()
{
fun(2, "21"); /* The compiler has not seen the declaration. */
return 0;
}
int fun(int x, char *p)
{
/* ... */
}
Doğrudan veya bir başlıkta, ana gibi önce işlevinizi bildirmeniz gerekir:
int fun(int x, char *p);
Doğru yol başlıkta işlev prototipini bildirmektir.
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);
}
Tek bir dosya ile alternatif (main.c)
static int some_main(const char *name);
int some_main(const char *name)
{
// do something
}
#İncludes'inizi main.c dosyasında yaptığınızda, #include referansını dahil edilenler listesinin en üstünde başvurulan işlevi içeren dosyaya yerleştirin. Örneğin, bunun main.c olduğunu ve başvurulan işlevin "SSD1306_LCD.h" olduğunu söyleyin
#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
Yukarıdaki "örtük işlev bildirimi" hatası oluşturmayacak, ancak aşağıda
#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"
Tam olarak aynı #include listesi, sadece farklı bir düzen.
Benim için oldu.
Bunu aldığınızda error: implicit declaration of function
, rahatsız edici işlevi de listelemelidir. Genellikle bu hata, unutulmuş veya eksik başlık dosyası nedeniyle oluşur, bu nedenle kabuk isteminde , üstteki bölüme yazabilir man 2 functionname
ve bakabilirsiniz SYNOPSIS
, çünkü bu bölüm dahil edilmesi gereken başlık dosyalarını listeleyecektir. Ya da http://linux.die.net/man/ adresini deneyin Bu, köprülenmiş ve aranması kolay çevrimiçi adam sayfalarıdır. İşlevler genellikle başlık dosyalarında tanımlanır, gerekli başlık dosyaları da dahil olmak üzere genellikle yanıttır. Cnicutar'ın dediği gibi,
Derleyicinin henüz bir bildirim ("prototip") görmediği bir işlev kullanıyorsunuz.
Tanımlı doğru başlıklara sahipseniz ve GlibC
kütüphane olmayan bir ( Musl C gibi ) kullanıyorsanız gcc
, error: implicit declaration of function
gibi GNU uzantılarıyla malloc_trim
karşılaşıldığında da atar .
Çözüm, uzantıyı ve başlığı sarmaktır :
#if defined (__GLIBC__)
malloc_trim(0);
#endif
Bence soru% 100 yanıtlanmadı. Derleme zamanı yönergesi olan typeof () eksik sorunu arıyordum.
Aşağıdaki bağlantılar duruma ışık tutacaktır:
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
sonuç olarak kullanmaya çalışın __typeof__()
. Ayrıca gcc ... -Dtypeof=__typeof__ ...
yardımcı olabilir.