предупреждение: неявное объявление функции
мой компилятор (GCC) дает мне предупреждение:
предупреждение: неявное объявление функции
пожалуйста, помогите мне понять, почему это происходит.
6 ответов:
вы используете функцию, для которой компилятор не видит объявление ("прототип") еще.
например:
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);
правильный способ-объявить прототип функции в заголовке.
пример
главная.h
#ifndef MAIN_H #define MAIN_H int some_main(const char *name); #endif
главная.c
#include "main.h" int main() { some_main("Hello, World\n"); } int some_main(const char *name) { printf("%s", name); }
альтернатива с одним файлом (main.в)
static int some_main(const char *name); int some_main(const char *name) { // do something }
когда вы делаете ваш #включает в себя в основном.c, поместите ссылку #include на файл, содержащий указанную функцию, в верхней части списка include. например, скажите, что это главное.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, только в другом порядке.
Ну, это сделал для меня.
если у вас есть правильные заголовки определены и используют не
GlibC
библиотеки (например,Musl C)gcc
кроме того,error: implicit declaration of function
когда расширения GNU, такие какmalloc_trim
встречаются.решение:оберните расширение и заголовок:
#if defined (__GLIBC__) malloc_trim(0); #endif
когда вы
error: implicit declaration of function
Он также должен перечислить оскорбительную функцию. Часто эта ошибка происходит из-за забытого или отсутствующего файла заголовка, поэтому в командной строке вы можете ввестиman 2 functionname
и посмотрите наSYNOPSIS
раздел вверху, так как в этом разделе будут перечислены все заголовочные файлы, которые необходимо включить. Или попробуйте http://linux.die.net/man/ это онлайн-страницы руководства, на которые они гиперссылки и легко искать. Функции часто определяются в заголовочных файлах, включая любые необходимые заголовочные файлы часто являются ответом. Как сказал кникутар,вы используете функцию, для которой компилятор не видел декларации ("прототипа") пока нет.
Я думаю, что вопрос не на 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
В заключение попробуйте использовать . Также
gcc ... -Dtypeof=__typeof__ ...
can помощь.