Implicit declaration of function abs

мой компилятор (GCC) дает мне предупреждение:

предупреждение: неявное объявление функции

пожалуйста, помогите мне понять, почему это происходит.

6 ответов:

вы используете функцию, для которой компилятор не видит объявление ("прототип") еще.

вы должны объявить свою функцию перед main, как это, либо непосредственно, либо в заголовке:

правильный способ-объявить прототип функции в заголовке.

главная.h

главная.c

альтернатива с одним файлом (main.в)

когда вы делаете ваш #включает в себя в основном.c, поместите ссылку #include на файл, содержащий указанную функцию, в верхней части списка include. например, скажите, что это главное.c и ваша ссылочная функция находится в " SSD1306_LCD.h"

выше не будет генерировать ошибку" неявное объявление функции", но ниже будет —

точно такой же список #include, только в другом порядке.

Ну, это сделал для меня.

если у вас есть правильные заголовки определены и используют не GlibC библиотеки (например,Musl C) gcc кроме того, error: implicit declaration of function когда расширения GNU, такие как malloc_trim встречаются.

когда вы error: implicit declaration of function Он также должен перечислить оскорбительную функцию. Часто эта ошибка происходит из-за забытого или отсутствующего файла заголовка, поэтому в командной строке вы можете ввести man 2 functionname и посмотрите на SYNOPSIS раздел вверху, так как в этом разделе будут перечислены все заголовочные файлы, которые необходимо включить. Или попробуйте http://linux.die.net/man/ это онлайн-страницы руководства, на которые они гиперссылки и легко искать. Функции часто определяются в заголовочных файлах, включая любые необходимые заголовочные файлы часто являются ответом. Как сказал кникутар,

вы используете функцию, для которой компилятор не видел декларации ("прототипа") пока нет.

Я думаю, что вопрос не на 100% ответил. Я искал проблему с отсутствующим typeof (), который является директивой времени компиляции.

следующие ссылки прольют свет на ситуацию:

В заключение попробуйте использовать . Также gcc . -Dtypeof=__typeof__ . can помощь.

Компиляция следующего кода с помощью GCC-5.1.0 выдает предупреждение:

Я составил один и тот же код с GCC-4.9.2 и это не производит никакого предупреждения.

abs() Функция объявлена в которой вы не включены.

GCC 4.9.2 не жаловался , потому что режим компиляции по умолчанию был C89 / C90 ( -std=gnu89 ) и функция не должен быть объявлена перед использованием в C89 до тех пор , как они возвращаются int , но режим компиляции по умолчанию был изменен на С11 ( -stdd=gnu11 ) в GCC 5.1.0 (см примечания к выпуску ) и C11 функции должны быть объявлены (или определены) , прежде чем они используются.

I used the abs() function and I added #include at the top of code. But I keep getting this error:

I’m using LLVM compiler.

Why does this error occurs even though I have included math.h ?

1 Answer 1

As a rule of thumb the mathematical functions that operate on floating point numbers are in math.h, and the ones that operate on integers are in stdlib.h.

There’s a pretty good Wikipedia article on C mathematical functions if you need more information.

Not the answer you’re looking for? Browse other questions tagged c math.h absolute-value or ask your own question.

Linked

Related

Hot Network Questions

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

site design / logo © 2020 Stack Exchange Inc; user contributions licensed under cc by-sa 4.0 with attribution required. rev 2020.1.13.35763


[an error occurred while processing the directive]
Карта сайта