вот именно, что массив и структура - производные типы. То есть точно такие же, как любые другие, какие юзер может сконструировать сам. Соответственно и создание методов работы с этими типами - дело пользователя. а не компилятора.
При разработке программ (не зависимо от языка программирования) самой сложной задачей является придумывание имён (идентификаторов) декларациям. С одной стороны имя должно быть коротким, а с другой -- беглого взгляда на код должно быть достаточно, чтобы понять для чего та или иная декларация нужна. Для чего нужны поля: Код (C++): uint8_t data_size; и Код (C++): uint8_t dataSize; ?
можно. Но только зачем здесь sizeof(), если утилита конвертации это сделает сама по шаблону. Т.е. мне вынести размерность массива из скобок [] в отдельную константу - просто подправить шаблон.
намедни @SergeiL делился ссылкой на статью о "грамотном" оформелении кода. Здесь же, я так понимаю, несущее смысл название переменной уже занято, поэтому придумалось то, что придумалось.
а жаль, что такое на сях нельзя сотворить: Код (C++): typedef struct { const uint8_t data[]; uint8_t width; uint8_t count; } ImageChar_t;
дак по идее можно так. только надо циферку в [] написать чтобы оно понимало сколько там будет байтов.
Почему нельзя??? Это лохам нельзя, а нормальным пацанам и не такое можно! Барабан Страдивари ещё никто не отменял! Если, конечно, правильно написать. И, кстати, этот вопрос (про массив неопределённой длины в структуре) встречаю второй раз за несколько дней, а раньше не встречал никогда - это чё, поветрие такое? На, изучай - http://arduino.ru/forum/pesochnitsa...namicheskii-massiv-v-strukturu#comment-580825, хотя - это жуткий говнокод.
||=== Build: Debug in pst (compiler: GNU GCC Compiler) ===| C:\Program Files\CodeBlocks\pst\main.cpp|20|warning: extended initializer lists only available with -std=c++11 or -std=gnu++11| C:\Program Files\CodeBlocks\pst\main.cpp|28|error: too many initializers for 'const char* [0]'| ||=== Build failed: 1 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===| а если в скобках циферку поставить, то компилится и работает, но все равно пишет что extended initializer lists only available with -std=c++11 or -std=gnu++11
еще хуже стало ||=== Build: Debug in pst (compiler: GNU GCC Compiler) ===| C:\Program Files\CodeBlocks\pst\main.cpp|20|warning: extended initializer lists only available with -std=c++11 or -std=gnu++11| C:\Program Files\CodeBlocks\pst\main.cpp|28|warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]| C:\Program Files\CodeBlocks\pst\main.cpp|28|warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]| C:\Program Files\CodeBlocks\pst\main.cpp|28|warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]| C:\Program Files\CodeBlocks\pst\main.cpp|28|warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]| ||=== Build finished: 0 error(s), 5 warning(s) (0 minute(s), 0 second(s)) ===|
Код (C++): #include <stdio.h> #include <stdlib.h> #include <string.h> struct TMenu { char ItemCount; char SelectItem; char LastActiveItem, LastTopItem; char *ItemName[12]; }; TMenu Menu1 { 4, 0, 0, 0, { "Item1", "Item2", "Item3", "Item4", } }; int main() { printf("%s\n",Menu1.ItemName[0]); } это наверно потому что у меня компилятор какой-то старый паленый
а так: Код (C++): #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { char ItemCount; char SelectItem; char LastActiveItem, LastTopItem; char *ItemName[12]; } TMenu; TMenu Menu1 = { 4, 0, 0, 0, { "Item1", "Item2", "Item3", "Item4", } }; int main() { printf("%s\n",Menu1.ItemName[0]); } у меня собирается без ошибок и работает компилятор довольно старый: gcc version 4.7.2 20120921 Red Hat linux x64
а всё понял кажется. значек = нужен при инициализации структуры Код (C++): #include <stdio.h> #include <stdlib.h> #include <string.h> struct TMenu { char ItemCount; char SelectItem; char LastActiveItem, LastTopItem; const char *ItemName[12]; }; TMenu Menu1 = { 4, 0, 0, 0, { "Item1", "Item2", "Item3", "Item4", } }; int main() { printf("%d\n",Menu1.ItemCount); for(int i=0;i<Menu1.ItemCount;i++){ printf("%s\n",Menu1.ItemName[i]); } } но это тонкости, а суть в том, что если в const char *ItemName[ ]; циферку не поставить, то выдает ошибку хоть в начале структуры хоть в конце оно стоит да только что допер