Как предупреждение о неявном объявлении какой-либо функции влияет на мой код? - PullRequest
1 голос
/ 15 сентября 2011

Смотрите, я создал библиотеку, в которой есть несколько файлов .h и несколько .c.

Теперь при некоторых обстоятельствах я не убрал предупреждение, которое говорит

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

Теперь я хочу спросить вас, это вызывает какие-либо проблемы в двоичном файле моей библиотеки?

Будет ли это негативно влиять на работу моей библиотеки на встроенных платформах или где-либо еще?

Ответы [ 2 ]

4 голосов
/ 15 сентября 2011

В C90 вызов функции без видимого объявления создает неявное объявление функции, возвращающей int и принимающей продвинутые типы аргументов.Если ваша функция getHandle возвращает указатель, например, тогда компилятор сгенерирует код, предполагая, что он возвращает int.Присвоение результата объекту-указателю должно как минимум вызвать другое предупреждение.Это может работать нормально (если int и тип указателя имеют одинаковый размер, а результаты int и функции указателя возвращаются одинаково), или это может привести к ошибкам (если, например, int равно 32 битам, а указатели - 64)биты, или если результаты указателя возвращаются в адресных регистрах в стиле 68K).

Стандарт C99 удалил неявный int из языка.Вызов функции без видимого объявления является нарушением ограничения, требующим диагностики и, возможно, вызывающим отклонение вашей программы.

И если вы просто исправите проблему , вам не нужнотратить время на выяснение того, как и будет ли это работать, если вы не исправите это.

3 голосов
/ 15 сентября 2011

В таком случае компилятор не может проверить правильность использования getHandle, то есть, являются ли возвращаемое значение и аргументы правильного типа и количества. Он просто примет то, как вы его называете, без каких-либо явных утверждений, что это правильный путь.

Добавление прототипа функции - это способ сообщить компилятору, что это целевое использование функции, и это будет ошибкой во время компиляции, чтобы не соответствовать этому.

Это может вызвать некоторые неприятные ошибки в случае несоответствия между тем, как она вызывается, и тем, как функция ожидает свои аргументы. Наиболее вероятным эффектом будет повреждение стека.

Если нет несоответствия, это не будет иметь никакого значения во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...