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

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

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

|
Советую ознакомиться с http://ru.wikipedia.org/wiki/%D0%9F%D1%80%...%86%D0%B8%D0%B8А вообще - ИМХО это бадстайл (функции без прототипа) Цитата(777777 @ Sep 23 2010, 13:18)  А она и так не занимает места. Не думаешь ли ты, что включение какого-то h-файла может что-то добавить к твоему коду? В них хранятся лишь декларации, необходимые компилятору, которые не порождают ни код, ни переменных. Некоторые талантливые программисты могут вставлять в заголовочный файл декларации переменных. В таком случае, естественно размер кода будет увеличен
|
|
|
|
|
Sep 23 2010, 10:49
|
Местный
  
Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699

|
Цитата(MrYuran @ Sep 23 2010, 17:36)  Я вставляю реализацию функций static inline. Что имеете против? функция != переменная
|
|
|
|
|
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:14
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(777777 @ Sep 23 2010, 17:08)  потому что стоит этот h-файл включить в два c-файла, как линкер выдаст ошибку о том, что в программе имеются несколько переменных с одинаковым именем. Если они объявлены как static, то промолчит, проглотит и не поперхнется. Цитата(777777 @ Sep 23 2010, 17:08)  ЗЫ. static имеет много значений в C в зависимости от контекста, а что он означает применительно к функции? static применительно к функции? - ограничивает ее область видимости вроде как.
|
|
|
|
|
Sep 23 2010, 11:15
|

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

|
Цитата(777777 @ Sep 23 2010, 14:08)  ЗЫ. static имеет много значений в C в зависимости от контекста, а что он означает применительно к функции? Я полагаю имеется в виду pure-С? static - как по мне : ограничение видимости в пределах файла
--------------------
нельзя недооценивать предсказуемость глупости
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|