|
warning: implicit declaration of function 'memset', почему лишь warning и почему все работает? |
|
|
|
 |
Ответов
|
Sep 23 2010, 06:05
|
Участник

Группа: Участник
Сообщений: 25
Регистрация: 17-09-10
Пользователь №: 59 547

|
Цитата(Сергей Борщ @ Sep 22 2010, 16:44)  При известных на этапе компиляции параметрах он генерит встроенные оптимальные (под конкретные параметры) тела функций вместо вызова библиотек. В противном случае споткнулся бы линкер. выходит, этот трюк можно использовать для снижения объема кода(если кроме простых memset, memcpy и т д, функций не зовешь)? Не включаешь #include "string.h" и библиотека не занимает места?
|
|
|
|
|
Sep 23 2010, 11:08
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(Сергей Борщ @ Sep 23 2010, 13:42)  Возможно я неясно выразился: Включать string.h, конечно, нужно. Просто в некоторых тривиальных случаях компилятор может вместо вызова библиотечной функции вставить прямо в код ее оптимизированную под конкретный случай версию. А если случай нетривиальный (один из параметров - переменная и ее значение неизвестно на этапе компиляции) он вызовет библиотечную функцию. Я извиняюсь, но параметры - практически всегда переменные, но это не препятствие для встраивания тела функции в код. Может memset не самый удачный пример из-за того, что память обычно заполняют какой-то константой, но вот функцию abs() глупо вызывать, передавая ей в качестве параметра константу, согласись. Тем не менее она ведет себя так же - компилятор о ней занет даже без прототипа и встраивает ее тело прямо в код. Цитата(Dima_G @ Sep 23 2010, 14:05)  Спасибо, я уже закончил детский сад Цитата(Dima_G @ Sep 23 2010, 14:05)  Некоторые талантливые программисты могут вставлять в заголовочный файл декларации переменных. В таком случае, естественно размер кода будет увеличен От деклараций (declaration) переменных ни код, ни озу не увеличится. он может увеличиться от определений (definition) переменных или функций. Но это, действительно могут делать только очень талантливые программисты, потому что стоит этот h-файл включить в два c-файла, как линкер выдаст ошибку о том, что в программе имеются несколько переменных с одинаковым именем. Цитата(MrYuran @ Sep 23 2010, 14:36)  Я вставляю реализацию функций static inline. Что имеете против? Инлайновые функции с точки зрения компилятора являются declaration. Однако, если вы присвоете ее адрес какому-нибудь указателю на функцию, то она станет обычной функцией со всеми вытекающими отсюда последствиями. ЗЫ. static имеет много значений в C в зависимости от контекста, а что он означает применительно к функции? Я полагаю имеется в виду pure-С?
|
|
|
|
|
Sep 23 2010, 11:15
|

Местный
  
Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530

|
Цитата(777777 @ Sep 23 2010, 14:08)  ЗЫ. static имеет много значений в C в зависимости от контекста, а что он означает применительно к функции? Я полагаю имеется в виду pure-С? static - как по мне : ограничение видимости в пределах файла
--------------------
нельзя недооценивать предсказуемость глупости
|
|
|
|
Сообщений в этой теме
Kris2007 warning: implicit declaration of function 'memset' Sep 22 2010, 12:39 Kris2007 Хм т.е. все сделано правильно??
И #include ... Sep 23 2010, 05:50  Сергей Борщ Цитата(Kris2007 @ Sep 23 2010, 08:50) И ... Sep 23 2010, 06:01  777777 Цитата(vacvvn @ Sep 23 2010, 10:05) выход... Sep 23 2010, 06:18    rezident Цитата(777777 @ Sep 23 2010, 17:08) потом... Sep 23 2010, 11:14      sergeeff Цитата(777777 @ Sep 23 2010, 14:18) Это д... Sep 23 2010, 11:22      MrYuran Цитата(777777 @ Sep 23 2010, 15:18) Это д... Sep 23 2010, 11:25    Dima_G Цитата(777777 @ Sep 23 2010, 18:08) Спаси... Sep 23 2010, 15:32 Dima_G Советую ознакомиться с
http://ru.wikipedia.org/wi... Sep 23 2010, 10:05 MrYuran Цитата(Dima_G @ Sep 23 2010, 14:05) Некот... Sep 23 2010, 10:36  Dima_G Цитата(MrYuran @ Sep 23 2010, 17:36) Я вс... Sep 23 2010, 10:49 _Pasha Цитата(Dima_G @ Sep 23 2010, 14:05) Некот... Sep 23 2010, 11:22  777777 Цитата(_Pasha @ Sep 23 2010, 15:22) Приме... Sep 23 2010, 11:25   sKWO Цитата(777777 @ Sep 23 2010, 14:25) Я пре... Sep 23 2010, 11:57    777777 Цитата(sKWO @ Sep 23 2010, 15:57) ЦитатаЯ... Sep 24 2010, 05:30     sKWO Цитата(777777 @ Sep 24 2010, 08:30) Ты зн... Sep 29 2010, 05:23      777777 Цитата(sKWO @ Sep 29 2010, 09:23) А Вы зн... Sep 29 2010, 17:01       sKWO Цитата(777777 @ Sep 29 2010, 20:01) Этот ... Sep 30 2010, 05:54        777777 Цитата(sKWO @ Sep 30 2010, 09:54) Ну а ес... Sep 30 2010, 06:12         sKWO Цитата(777777 @ Sep 30 2010, 09:12) Если ... Sep 30 2010, 07:15         Petka Цитата(777777 @ Sep 30 2010, 10:12) Нет, ... Sep 30 2010, 08:04          777777 Цитата(Petka @ Sep 30 2010, 12:04) Это за... Sep 30 2010, 10:38 Petka Цитата(Kris2007 @ Sep 22 2010, 16:39) ... Sep 29 2010, 10:00 Juray У меня почему-то линкер не ругался на глобальные п... Sep 30 2010, 12:30 IgorKossak Цитата(Juray @ Sep 30 2010, 15:30) А вот ... Sep 30 2010, 12:59 Juray Чистый С. gcc - WinAVR 20050214.
файл global.h:
К... Sep 30 2010, 13:14 IgorKossak Странно, что работает.
Грамотнее было бы U16 d_sta... Sep 30 2010, 13:20 Juray Да вот сам удивляюсь, читая эту ветку.
Что грамот... Sep 30 2010, 13:51 777777 Цитата(Juray @ Sep 30 2010, 17:51) Вам го... Sep 30 2010, 15:24  Juray Цитата(777777 @ Sep 30 2010, 19:24) Ты ду... Oct 1 2010, 11:56   777777 Цитата(Juray @ Oct 1 2010, 15:56) Сейчас ... Oct 1 2010, 16:36   mdmitry Цитата(Juray @ Oct 1 2010, 15:56) Сейчас ... Oct 2 2010, 08:29 rezident Возможно та версия WinAVR не применяла раздельную ... Sep 30 2010, 15:39 777777 Цитата(rezident @ Sep 30 2010, 19:39) Воз... Sep 30 2010, 15:58  rezident Цитата(777777 @ Sep 30 2010, 21:58) То ес... Sep 30 2010, 16:03 Juray Предупреждения - по умолчанию. Этого недостаточно?... Oct 2 2010, 08:44
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|