ViKo 1 2 июня, 2020 Опубликовано 2 июня, 2020 · Жалоба 3 минуты назад, Arlleex сказал: Да. По образу и подобию В целом, это даже удобнее. Глазами первоначально виден скелет структуры, а уже отдельно можно смотреть чем она заполнена. А размеры обязательно вычислять, или пустые скобки можно ставить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 190 2 июня, 2020 Опубликовано 2 июня, 2020 · Жалоба 18 минут назад, ViKo сказал: А размеры обязательно вычислять, или пустые скобки можно ставить? Пустые скобки будут равносильны трактовке элемента как указателя. Поэтому обязательно вычислять. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 2 июня, 2020 Опубликовано 2 июня, 2020 · Жалоба 16 минут назад, Arlleex сказал: Пустые скобки будут равносильны трактовке элемента как указателя. Поэтому обязательно вычислять. Да, уже убедился. Таперича не хотит смещение вычислять. /*!***************************************************************************** @brief Character (0x20...0x3f) offsets array @note only digits and dot */ static const uint16_t BigCharOffs[] = { offsetof(BigCharIndx, BigSpace), // 0x20 sp offsetof(BigCharIndx, BigSpace), // 0x21 ! Source/BigFont.c(677): error: unknown type name 'BigCharIndx' offsetof(BigCharIndx, BigSpace), // 0x20 sp ^ Надо typedef - ом описать структуру? Сейчас сделаю. А 5.06 компилятор, похоже, и offsetof не понимает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 190 2 июня, 2020 Опубликовано 2 июня, 2020 · Жалоба 4 минуты назад, ViKo сказал: Source/BigFont.c(677): error: unknown type name 'BigCharIndx' offsetof(BigCharIndx, BigSpace), // 0x20 sp Не знает кто такой BigCharIndx на момент объявления BigCharOffs. Он (BigCharOffs) у Вас после структуры BigCharIndx объявляется? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 2 июня, 2020 Опубликовано 2 июня, 2020 · Жалоба 2 минуты назад, Arlleex сказал: Не знает кто такой BigCharIndx на момент объявления BigCharOffs. Он (BigCharOffs) у Вас после структуры BigCharIndx объявляется? Да, после. Сразу за структурой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 190 2 июня, 2020 Опубликовано 2 июня, 2020 · Жалоба 4 минуты назад, ViKo сказал: Да, после. Сразу за структурой. Покажите полный код тогда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 2 июня, 2020 Опубликовано 2 июня, 2020 · Жалоба Вот так, похоже, получится. Добавил имя типа структуры. И тип struct придётся добавить при вычислении offsetof. static const struct bcrx { uint8_t BigSpace[2]; // 'space' (default, dummy) static const uint16_t BigCharOffs[] = { offsetof(struct bcrx, BigSpace), // 0x20 sp offsetof(struct bcrx, BigSpace), // 0x21 ! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 190 2 июня, 2020 Опубликовано 2 июня, 2020 · Жалоба 1 минуту назад, ViKo сказал: Вот так, похоже, получится. Добавил имя типа структуры. И тип struct придётся добавить при вычислении offsetof. Ну либо через typedef описать структуру, создать статический экземпляр и уже делать без 'struct'. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 2 июня, 2020 Опубликовано 2 июня, 2020 · Жалоба 39 минут назад, Arlleex сказал: Пустые скобки будут равносильны трактовке элемента как указателя. Для typedef аналогично действовать будет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 2 июня, 2020 Опубликовано 2 июня, 2020 · Жалоба Всё, скомпилировал, чего натворил. Пойду в симулятор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 190 2 июня, 2020 Опубликовано 2 июня, 2020 · Жалоба 30 минут назад, ViKo сказал: Для typedef аналогично действовать будет? Лучше вопрос задавать с примером кода, как хотите сделать. А то я сейчас понял, что Вы хотите некое подобие typedef struct { u8 a[]; u8 b[]; }str_t; static const str_t str = {.a = {1, 2}, .b = {3, 4, 5}}; сделать, что, естественно, не правильно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 2 июня, 2020 Опубликовано 2 июня, 2020 · Жалоба 6 минут назад, Arlleex сказал: Лучше вопрос задавать с примером кода, как хотите сделать. А то я сейчас понял, что Вы хотите некое подобие сделать, что, естественно, не правильно. Да, вы правильно поняли. Удивляет, что нужно считать размеры массивов. Наверное, можно задать отдельно типы - массивы, вычислять sizeof и вставлять в тип структуры? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 190 2 июня, 2020 Опубликовано 2 июня, 2020 · Жалоба 23 минуты назад, ViKo сказал: Да, вы правильно поняли. Удивляет, что нужно считать размеры массивов. Наверное, можно задать отдельно типы - массивы, вычислять sizeof и вставлять в тип структуры? Компилятор не знает, как и в каком контексте Вам заблагорассудится использовать тип структуры. И, согласно синтаксису языка, тип при его описании должен быть полным. А полным считается тот тип, для которого можно определить его размер и состав в месте применения. Вот, например, как надо трактовать эту запись? typedef struct { u8 a; u8 b[]; }str_t; А эту? typedef struct { u8 a; u8 b[]; u8 c; }str_t; Что, по-Вашему, должно показать offsetof() до 'c'? В первом примере компилятор проглотит определение типа, потому что b[] стоит в конце. Во втором же компилятор будет ругаться, что 'b' это массив неопределенной длин(н)ы. Для второго случая компилятор не сможет подсчитать sizeof(str_t), поэтому выкидывает ошибку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 2 июня, 2020 Опубликовано 2 июня, 2020 · Жалоба Ясно. А как мысль насчет sizeof массивов, которыми инициализирую структуру? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 190 2 июня, 2020 Опубликовано 2 июня, 2020 · Жалоба 1 минуту назад, ViKo сказал: Ясно. А как мысль насчет sizeof массивов, которыми инициализирую структуру? Подробнее? Под вечер я уже совсем не соображаю ничего =) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться