|
если массив объявлен static , будут ли у него начльные нулевые значения?, Компилятор CV |
|
|
|
 |
Ответов
(1 - 9)
|
Feb 24 2009, 18:05
|
Участник

Группа: Участник
Сообщений: 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.Ничего не читаем, а потом везде говорим " плохой компилятор"...
|
|
|
|
|
Feb 25 2009, 22:01
|

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

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

Знающий
   
Группа: Свой
Сообщений: 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 есть некоторые особенности, в отличие от других компиляторов, поэтому и спросил-может, кто сталкивался...
|
|
|
|
|
Feb 26 2009, 06:15
|

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

|
2 uriy:Ну Вы право меня за школьника не держите  Обо всём этом я прекрасно знаю. Я веду речь о константных данных расположенных в ПЗУ или ЕЕPROM. Меня интересует именно то о чём я спрашиваю, т.е. инициализация при объявлении константы.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Feb 26 2009, 19:50
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 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 а не буду в электронной таблице генерировать :-)
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|