Да, есть мнение, что flash в CodeVision "портит" sizeof.
Интересно было бы узнать у автора вопроса, что происходит, если это не flash, а обычный массив. Там работает?
В avr-gcc, кстати, такое у меня вполне корректно отрабатывает:
Код:
static const uint8_t alarmSym[] PROGMEM = { /* Empty rectangle */ 0b11111, 0b00000, 0b00000, // ... много других байтов (кстати, зачем у автора вопроса там int в аналогичном случае?) 0b00000, };
for (i = 0; i < sizeof(alarmSym); i++) ks0066WriteData(pgm_read_byte(&alarmSym[i]));
Здесь PROGMEM не непонятно что, а вполне обычный макрос (pgmspace.h): #define PROGMEM __ATTR_PROGMEM__, в свою очередь #define __ATTR_PROGMEM__ __attribute__((__progmem__))
Недавно британские учёные доказали, что CV портит ДНК людей. После длительного воздействия CV на человека - его можно не спасти, он становится дельфином. Единственный выход - быстрейшее избавление от патогена.
sizeof показывает размер объекта в байтах - т.е. в вашем случае размер массива будет равен sizeof(int) * 4....
Cогласно "классике" sizeof x и sizeof( x ) - это разные вещи. sizeof( x ) для массива вернёт размер указателя, чем массив собственно и является, а sizeof x - уже размер массива 'x' в байтах, да и то, если это было определено на этапе компиляции. Как Вы написали, было-бы раньше. Сейчас, наверное, все компиляторы по новым стандартам уже пишут. С некоторых пор, стандарт Си сильно поменяли, как там теперь стало, читать надо. По крайней мере появился запрет на арифметику с указателями. Всё ради хомячков. Глядишь, и тип данных 'массив' введут. Лично я в данном случае вообще не вижу смысла в sizeof.
Cогласно "классике" sizeof x и sizeof( x ) - это разные вещи. sizeof( x ) для массива вернёт размер указателя, чем массив собственно и является, а sizeof x - уже размер массива 'x' в байтах, да и то, если это было определено на этапе компиляции.
будьте любезны ссылочку на эту классику - хотелось бы приобщиться к знаниям.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Да, CV, и не могу получить количество цифр или символов массива.
Однажды читал на одном из форумов, что CV не умеет sizeof. Проверял примеры, иллюстрирующие его "работу", на своем экземпляре - действительно не работает. Правда, не во всех версиях.
P.S. Только не подумайте, что я им пользовался - содержал исключительно ради помощи страждущим.
P.P.S.
Rtmip писал(а):
А еще более подробно можете написать, чтобы не читать по 100 страниц форума военного? Я про то, какие еще "не все его недостатки"(CVAVR) и в чем именно не реализует стандарт?
Rtmip, Вы еще здесь? Как Вам эта прэлесть с sizeof'ом?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 397
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения