คอมไพเลอร์ (GCC) ของฉันกำลังส่งคำเตือน:
คำเตือน: การประกาศฟังก์ชันโดยปริยาย
โปรดช่วยฉันเข้าใจว่าทำไมมันถึงมา
คอมไพเลอร์ (GCC) ของฉันกำลังส่งคำเตือน:
คำเตือน: การประกาศฟังก์ชันโดยปริยาย
โปรดช่วยฉันเข้าใจว่าทำไมมันถึงมา
คำตอบ:
คุณกำลังใช้ฟังก์ชั่นที่คอมไพเลอร์ไม่ได้เห็นการประกาศ (" ต้น ")
ตัวอย่างเช่น:
int main()
{
fun(2, "21"); /* The compiler has not seen the declaration. */
return 0;
}
int fun(int x, char *p)
{
/* ... */
}
คุณต้องประกาศฟังก์ชั่นของคุณก่อนหน้า main เช่นนี้โดยตรงหรือในส่วนหัว:
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 ไปยังไฟล์ที่มีฟังก์ชันที่อ้างอิงที่ด้านบนของรายการ include เช่นบอกว่านี่คือ 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
ด้านบนจะไม่สร้างข้อผิดพลาด "การประกาศโดยนัยของฟังก์ชัน" แต่ด้านล่างจะ -
#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/นี่คือหน้าเว็บออนไลน์ที่มีไฮเปอร์ลิงก์และง่ายต่อการค้นหา ฟังก์ชั่นมักจะถูกกำหนดไว้ในไฟล์ส่วนหัวรวมถึงไฟล์ส่วนหัวใด ๆ ที่จำเป็นมักจะเป็นคำตอบ เช่นเดียวกับ cnicutar กล่าวว่า
คุณกำลังใช้ฟังก์ชั่นที่คอมไพเลอร์ไม่ได้เห็นการประกาศ ("ต้น")
หากคุณมีส่วนหัวที่ถูกต้องที่กำหนดไว้ & กำลังใช้งานGlibC
ห้องสมุดที่ไม่ใช่(เช่นMusl C ) gcc
ก็จะโยนerror: implicit declaration of function
เมื่อส่วนขยาย GNU เช่นmalloc_trim
พบ
วิธีแก้คือห่อส่วนขยาย & ส่วนหัว :
#if defined (__GLIBC__)
malloc_trim(0);
#endif
คุณต้องประกาศฟังก์ชั่นที่ต้องการก่อนฟังก์ชั่นหลักของคุณ:
#include <stdio.h>
int yourfunc(void);
int main(void) {
yourfunc();
}
ฉันคิดว่าคำถามไม่ได้ตอบ 100% ฉันกำลังค้นหาปัญหากับ typeof () ที่หายไปซึ่งเป็นคำสั่งรวบรวมเวลา
ลิงค์ต่อไปนี้จะส่องแสงในสถานการณ์:
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__ ...
สามารถช่วย