реклама на сайте
подробности

 
 
> warning: implicit declaration of function 'memset', почему лишь warning и почему все работает?
Kris2007
сообщение Sep 22 2010, 12:39
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 75
Регистрация: 15-03-07
Пользователь №: 26 193



Правлю чужой код. AVR-GCC, Atmega128
При компиляции выдает море warning-ов на memset, memcpy и.т.п.
Проблему ли в том что нет #include "string.h".

Например:
../utils.c:47: warning: implicit declaration of function 'memset'
../utils.c:47: warning: incompatible implicit declaration of built-in function 'memset'


Но! Стало любопытно, ведь устройства с прошивкой продаются и вроде работают)
Почему, что сотворил компилятор?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Dima_G
сообщение Sep 23 2010, 10:05
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 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-файла может что-то добавить к твоему коду? В них хранятся лишь декларации, необходимые компилятору, которые не порождают ни код, ни переменных.

Некоторые талантливые программисты могут вставлять в заголовочный файл декларации переменных. biggrin.gif
В таком случае, естественно размер кода будет увеличен
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Sep 23 2010, 11:22
Сообщение #3


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Dima_G @ Sep 23 2010, 14:05) *
Некоторые талантливые программисты могут вставлять в заголовочный файл декларации переменных. biggrin.gif

Пример. Поддержка 7-сегментного индикатора. Кроме знакогенератора и определения собсна цифр как совокупности сегментов там ничего нет. Предлагаете знакогенератор определять где-то в другом месте, а в хедере описывать только как extern? biggrin.gif
Go to the top of the page
 
+Quote Post
777777
сообщение Sep 23 2010, 11:25
Сообщение #4


Профессионал
*****

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



Цитата(_Pasha @ Sep 23 2010, 15:22) *
Пример. Поддержка 7-сегментного индикатора. Кроме знакогенератора и определения собсна цифр как совокупности сегментов там ничего нет. Предлагаете знакогенератор определять где-то в другом месте, а в хедере описывать только как extern? biggrin.gif

Я предлагаю определять массив с цифрами в той функции, которая будет ими пользоваться. В памяти программ, естественно. Как-то так:
Код
func()
    {
    static uint16_t Freq[] PROGMEM = { 19, 7, 2, 1 };
    ...

При чем тут h-файл - хз.

Сообщение отредактировал 777777 - Sep 23 2010, 11:30
Go to the top of the page
 
+Quote Post
sKWO
сообщение Sep 23 2010, 11:57
Сообщение #5


Местный
***

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



Цитата(777777 @ Sep 23 2010, 14:25) *
Я предлагаю определять массив с цифрами в той функции, которая будет ими пользоваться. В памяти программ, естественно.

для даного тривиального случая да
для большого массива который используется многими функциями в разных с-файлах не получиться - памяти программ может не хватить, ИМХО


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
777777
сообщение Sep 24 2010, 05:30
Сообщение #6


Профессионал
*****

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



Цитата(sKWO @ Sep 23 2010, 15:57) *
Цитата
Я предлагаю определять массив с цифрами в той функции, которая будет ими пользоваться. В памяти программ, естественно.

для даного тривиального случая да
для большого массива который используется многими функциями в разных с-файлах не получиться - памяти программ может не хватить, ИМХО

А для большого массива который используется многими функциями в разных с-файлах определять (define) массив в h-файле тем более нельзя - тогда будут либо проблемы линкера, либо (если его объявить static) в каждом C-файле будет содержаться отдельный экземпляр этого массива, что увеличит размер памяти. И каждая функция будет работать со своим массивом. Если он только для чтения, то ты этого не заметишь, если же это массив данных (в ОЗУ), то программа работать не будет.

ЗЫ. только сейчас заметил: "памяти программ может не хватить" smile.gif Ты знаешь контроллеры, в которых память программ меньше, чем память данных? И поэтому такие массивы ты хранишь в ОЗУ? А позволь спросить, как ты их при этом инициализируешь? Ведь инициализировать их можно только из памяти программ, а если они там поместились, зачем из переписывать в ОЗУ? smile.gif

Сообщение отредактировал 777777 - Sep 24 2010, 05:39
Go to the top of the page
 
+Quote Post
sKWO
сообщение Sep 29 2010, 05:23
Сообщение #7


Местный
***

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



Цитата(777777 @ Sep 24 2010, 08:30) *
Ты знаешь контроллеры, в которых память программ меньше, чем память данных?

А Вы знаете?

Цитата(777777 @ Sep 23 2010, 14:25) *
Я предлагаю определять массив с цифрами в той функции, которая будет ими пользоваться. В памяти программ, естественно. Как-то так:
Код
func()
    {
    static uint16_t Freq[] PROGMEM = { 19, 7, 2, 1 };
    ...

вы будете иметь доступ к массиву Freq из другой функции рассположеной в этом же файле?


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
777777
сообщение Sep 29 2010, 17:01
Сообщение #8


Профессионал
*****

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



Цитата(sKWO @ Sep 29 2010, 09:23) *
А Вы знаете?

Нет, поэтому и помещаю константные массивы в память программ, а не данных
Цитата(sKWO @ Sep 29 2010, 09:23) *
вы будете иметь доступ к массиву Freq из другой функции рассположеной в этом же файле?

Этот массив другим функциям не нужен.
Go to the top of the page
 
+Quote Post
sKWO
сообщение Sep 30 2010, 05:54
Сообщение #9


Местный
***

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



Цитата(777777 @ Sep 29 2010, 20:01) *
Этот массив другим функциям не нужен.

Ну а если будет нужен, то Вы займётесь бездумным тиражированием и места ФЛЭШ может не хватить. Об этом я хотел и сказать. Особенно если массив большой а функций его использующих - много.


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Kris2007   warning: implicit declaration of function 'memset'   Sep 22 2010, 12:39
- - Сергей Борщ   Цитата(Kris2007 @ Sep 22 2010, 15:39) Поч...   Sep 22 2010, 12:44
|- - Kris2007   Хм т.е. все сделано правильно?? И #include ...   Sep 23 2010, 05:50
||- - Сергей Борщ   Цитата(Kris2007 @ Sep 23 2010, 08:50) И ...   Sep 23 2010, 06:01
|- - vacvvn   Цитата(Сергей Борщ @ Sep 22 2010, 16:44) ...   Sep 23 2010, 06:05
|- - 777777   Цитата(vacvvn @ Sep 23 2010, 10:05) выход...   Sep 23 2010, 06:18
|- - Сергей Борщ   Цитата(vacvvn @ Sep 23 2010, 09:05) Не вк...   Sep 23 2010, 09:42
|- - 777777   Цитата(Сергей Борщ @ Sep 23 2010, 13:42) ...   Sep 23 2010, 11:08
|- - rezident   Цитата(777777 @ Sep 23 2010, 17:08) потом...   Sep 23 2010, 11:14
|- - sKWO   Цитата(777777 @ Sep 23 2010, 14:08) ЗЫ. s...   Sep 23 2010, 11:15
||- - 777777   Цитата(sKWO @ Sep 23 2010, 15:15) static ...   Sep 23 2010, 11:18
||- - sergeeff   Цитата(777777 @ Sep 23 2010, 14:18) Это д...   Sep 23 2010, 11:22
||- - MrYuran   Цитата(777777 @ Sep 23 2010, 15:18) Это д...   Sep 23 2010, 11:25
||- - rezident   Цитата(777777 @ Sep 23 2010, 17:18) Это д...   Sep 23 2010, 13:33
|- - Dima_G   Цитата(777777 @ Sep 23 2010, 18:08) Спаси...   Sep 23 2010, 15:32
|- - 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
|- - 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th June 2025 - 22:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01507 секунд с 7
ELECTRONIX ©2004-2016