Kompiler saya (GCC) memberi saya peringatan:
peringatan: deklarasi fungsi implisit
Tolong bantu saya mengerti mengapa itu datang.
Kompiler saya (GCC) memberi saya peringatan:
peringatan: deklarasi fungsi implisit
Tolong bantu saya mengerti mengapa itu datang.
Jawaban:
Anda menggunakan fungsi di mana kompiler belum melihat deklarasi (" prototipe ").
Sebagai contoh:
int main()
{
fun(2, "21"); /* The compiler has not seen the declaration. */
return 0;
}
int fun(int x, char *p)
{
/* ... */
}
Anda perlu mendeklarasikan fungsi Anda sebelum main, seperti ini, baik secara langsung atau di header:
int fun(int x, char *p);
Cara yang benar adalah dengan mendeklarasikan prototipe fungsi di header.
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);
}
Alternatif dengan satu file (main.c)
static int some_main(const char *name);
int some_main(const char *name)
{
// do something
}
Saat Anda melakukan #include di main.c, masukkan #include referensi ke file yang berisi fungsi yang dirujuk di bagian atas daftar include. mis. Katakan ini main.c dan fungsi yang direferensikan dalam "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
Di atas tidak akan menghasilkan kesalahan "pernyataan fungsi implisit", tetapi di bawah ini akan
#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"
Persis #include list yang sama, hanya urutannya berbeda.
Ya, itu berlaku untuk saya.
Ketika Anda mendapatkannya, error: implicit declaration of function
harus juga mencantumkan fungsi menyinggung. Seringkali kesalahan ini terjadi karena file header yang terlupakan atau hilang, jadi pada prompt shell Anda dapat mengetik man 2 functionname
dan melihat SYNOPSIS
bagian di atas, karena bagian ini akan mendaftar file header yang perlu dimasukkan. Atau coba http://linux.die.net/man/ Ini adalah halaman manual daring yang mereka hyperlink dan mudah dicari. Fungsi sering didefinisikan dalam file header, termasuk file header yang diperlukan sering jawabannya. Seperti kata cnicutar,
Anda menggunakan fungsi di mana kompiler belum melihat deklarasi ("prototipe").
Jika Anda memiliki tajuk yang benar & menggunakan non GlibC
pustaka (seperti Musl C ) gcc
juga akan melempar error: implicit declaration of function
ketika ekstensi GNU sepertimalloc_trim
ditemui.
Solusinya adalah dengan membungkus ekstensi & header :
#if defined (__GLIBC__)
malloc_trim(0);
#endif
Saya pikir pertanyaannya tidak dijawab 100%. Saya sedang mencari masalah dengan typeof () yang hilang, yang merupakan kompilasi arahan waktu.
Tautan berikut akan menjelaskan situasi:
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
sebagai konsul mencoba untuk menggunakan __typeof__()
sebagai gantinya. Juga gcc ... -Dtypeof=__typeof__ ...
bisa membantu.