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

 
 
> если массив объявлен static , будут ли у него начльные нулевые значения?, Компилятор CV
Serj78
сообщение Feb 24 2009, 17:49
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 966
Регистрация: 27-05-06
Из: СПб
Пользователь №: 17 499



Я понимаю, что CV- "недокомпилятор",
но все же, я полагаю, что если я объявил глобальный массив

static char arr[64]; он будет изначально заполнен нулями?

или надо объявлять так :

static char arr[64]={0,0,0} ; ?

ну или так:

static char arr[64]={0} ;
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 9)
zhevak
сообщение Feb 24 2009, 17:58
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065



В startup-файле находится код, который чистит ВСЮ оперативу, так что
неинициализированные глобальные переменные по любому примут нулевые значения.

Посмотрите листинг (ассемблерный файл), поищите в нем __CLEAR_SRAM.


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
Nick_Shl
сообщение Feb 24 2009, 18:05
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 17-04-08
Пользователь №: 36 850



Цитата(Serj78 @ Feb 24 2009, 19:49) *
Я понимаю, что CV- "недокомпилятор", но все же, я полагаю, что если я объявил глобальный массив
static char arr[64]; он будет изначально заполнен нулями?
А вы "советский инженер"(второй за последние сутки) сначала делаем, потом думаем.
Для чего пишут документацию?
Открываем "Help"(по F1, если е знаете). Далее "CodeVisionAVR C Compiler Reference-> Variables" и читаем: If not specifically initialized, static variables are automatically set to 0 at program startup.

Ничего не читаем, а потом везде говорим "плохой компилятор"...
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 24 2009, 23:17
Сообщение #4


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Nick_Shl @ Feb 24 2009, 20:05) *
А вы "советский инженер"(второй за последние сутки) сначала делаем, потом думаем.

Чтобы не напрягать думалку от компилятора к компилятору по пустякам, и не заглядывать в документацию по вопросам по которым не нужно туда заглядывать, ничто не мешает всегда писать так:
static char arr[64]={0};
ничего плохого это не сделает, переменная занесется в Zero-Init сегмент. Да и в коде сразу видно чем проинициализировано.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Feb 25 2009, 22:01
Сообщение #5


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Возник попутно вопросик.
Если надо инициализировать длинный массив однородными величинами отличными от нуля, то это весьма утомительное занятие:
int arr[350] = {33,33,33,33,33,33,..... и так 350 раз};
Точно не поню то ли я где-то видел, то ли приглючило мне, но может кто подкинет такой макрос, чтоб было примерно так:
int arr[350] = {CLONE(33,350)};


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
uriy
сообщение Feb 26 2009, 04:55
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Что-то вы совсем детские вопросы задаете. Функция memset(arr, 33, 350), или если не хотите искать чем вас цикл не устраивеает for(i=0; i<350; i++)
Go to the top of the page
 
+Quote Post
Serj78
сообщение Feb 26 2009, 06:13
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 966
Регистрация: 27-05-06
Из: СПб
Пользователь №: 17 499



Цитата(Nick_Shl @ Feb 24 2009, 21:05) *
А вы "советский инженер"(второй за последние сутки) сначала делаем, потом думаем.
Для чего пишут документацию?
Открываем "Help"(по F1, если е знаете). Далее "CodeVisionAVR C Compiler Reference-> Variables" и читаем: If not specifically initialized, static variables are automatically set to 0 at program startup.
Ничего не читаем, а потом везде говорим "плохой компилятор"...


Все я читал, по этому и спрашиваю! Дело в том что один раз вылезла такая бяка за пару лет работы устройства- в 0-м элементе массива, куда в коде всей программы ничего не пишется, оказалась пятерка. Я знаю, что по правилам языка я сделал все правильно. А вот как на самом деле? У CV есть некоторые особенности, в отличие от других компиляторов, поэтому и спросил-может, кто сталкивался...
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Feb 26 2009, 06:15
Сообщение #8


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



2 uriy:Ну Вы право меня за школьника не держитеsmile.gif Обо всём этом я прекрасно знаю.
Я веду речь о константных данных расположенных в ПЗУ или ЕЕPROM.
Меня интересует именно то о чём я спрашиваю, т.е. инициализация при объявлении константы.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
ReAl
сообщение Feb 26 2009, 19:50
Сообщение #9


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(demiurg_spb @ Feb 26 2009, 08:15) *
Я веду речь о константных данных расположенных в ПЗУ или ЕЕPROM.
Меня интересует именно то о чём я спрашиваю, т.е. инициализация при объявлении константы.

Увы, С сам по себе такими возможностями не обладает.
Если компилятор позволяет делать достаточно сложные ассемблерные вставки, то можно ими.
Например, для avr-gcc

Ещё есть такое хорошее слово COG от Ned Batchelder, вставка в исходник в комментарии специального вида скрипта на питоне, который генерирует фрагмент исходника.
Как этим нормально пользоваться из сред "вещь в себе" не знаю, а в makefile просто прописывается зависимость файла mytables.c от mytables.cog с соответствующи правилом и всё генерируется по мере потребности при вызове make
Когда мне наконец-то понадобится в С-шном файле что-то в духе таблицы синусов - вероятно, я таки разберусь с COG а не буду в электронной таблице генерировать :-)


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Feb 26 2009, 21:18
Сообщение #10


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(ReAl @ Feb 26 2009, 22:50) *
Увы, С сам по себе такими возможностями не обладает.
Значит приглючило. Мне казалось что я давно чуть-ли не в книге с названием похожим на "СИ глазами хакера" читал о подобном, но тогда это было не нужно...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 07:33
Рейтинг@Mail.ru


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