Мой компилятор (GCC) выдает мне предупреждение:
предупреждение: неявное объявление функции
Пожалуйста, помогите мне понять, почему это происходит.
c
compiler-warnings
Angus
источник
источник
Ответы:
Вы используете функцию, для которой компилятор еще не видел объявление (« прототип »).
Например:
Вам нужно объявить вашу функцию перед main, как это, либо напрямую, либо в заголовке:
источник
Правильный путь - объявить прототип функции в заголовке.
пример
main.h
main.c
Альтернатива с одним файлом (main.c)
источник
Когда вы делаете #include в main.c, поместите ссылку #include на файл, который содержит указанную функцию, вверху списка включения. Например, скажите, что это main.c, а указанная вами функция находится в "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
обнаружении .Решение - обернуть расширение и заголовок :
источник
Вам нужно объявить желаемую функцию перед основной функцией:
источник
Я думаю, что на этот вопрос нет 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__ ...
может помочь.источник