мой компилятор (GCC) дает мне предупреждение:
предупреждение: неявное объявление функции
пожалуйста, помогите мне понять, почему это происходит.
Содержание
- 6 ответов:
- 2 answers
- 2 Answers 2
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 помощь.
November 2018
6.6k time
I am learning C. In this program I use sleep function to slowdown a count down. My text book doesn’t specify a library I should include to use the sleep function. So I use it without including any special library for it and it works. But it gives me this warning message in codeblocks. I tried to include but still the same warning message appears.
warning D:ProjectC language rial8 rial8.c|19|warning: implicit declaration of function `sleep’|
And here is my code.
I want to know what does the warning message mean? How important is it? Is there anything that I should do about it? Note that the program works anyway.
2 answers
Функция sleep не является частью языка программирования C. Таким образом, C компилятор должен декларация / прототип его так , что он может узнать о том, о количестве аргументов и их типов данных и возвращать тип данных функции. Когда он не находит его, он создает Implicit Declaration из этой функции.
В Linux, sleep имеет прототип и в окнах, есть еще одна функция , Sleep которая имеет прототип или . Вы всегда можете уйти с включая заголовок, если вы явно поставить прототип функции перед ее использованием. Это полезно , когда вам нужно только несколько функций из файла заголовка.
Прототип Sleep функции в C на окнах:
Помните, что это всегда хорошая практика, чтобы поставить прототип функции используется либо путем включения в соответствующий файл заголовка или явно писать. Даже, если вы не поставить его, компилятор будет просто выбросить предупреждение большую часть времени, и это будет сделать предположение, что в большинстве случаев будет то, что вы не хотите. Лучше включить файл заголовка, как API может измениться в будущих версиях библиотеки.
I am learning C. In this program I use sleep function to slowdown a count down. My text book doesn’t specify a library I should include to use the sleep function. So I use it without including any special library for it and it works. But it gives me this warning message in codeblocks. I tried to include but still the same warning message appears.
warning D:ProjectC language rial8 rial8.c|19|warning: implicit declaration of function `sleep’|
And here is my code.
I want to know what does the warning message mean? How important is it? Is there anything that I should do about it? Note that the program works anyway.
2 Answers 2
Windows doesn’t have the sleep function. Instead, it has Sleep , which takes the number of milliseconds to sleep:
You’ll need to either #include or #include , depending on the version of Windows you’re running. See MSDN for more details.
The function sleep is not part of C programming language. So, C compiler needs a declaration/prototype of it so that it can get to know about about number of arguments and their data types and return data type of the function. When it doesn’t find it, it creates an Implicit Declaration of that function.
In Linux, sleep has a prototype in and in windows, there is another function Sleep which has a prototype in or . You can always get away with including header, if you explicitly supply the prototype of the function before using it. It is useful when you need only few functions from a header file.
The prototype of Sleep function in C on windows is:
Remember, it is always a good practice to supply the prototype of the function being used either by including the appropriate header file or by explicitly writing it. Even, if you don’t supply it, compiler will just throw a warning most of the time and it will make an assumption which in most cases will be something that you don’t want. It is better to include the header file as API might change in future versions of the Library.
Источник: