|
|
 |
Ответов
|
Dec 17 2007, 11:41
|

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

|
присоединяюсь к sergik_vrn Структура, все элементы которой имеют одинаковый тип, явно напрашивается на то, чтобы быть массивом. Тем более, автор сам использует цикл для перебора элементов. Сложно запомнить? Хорошо. А для чего тогда используются комментарии? Комирование структуртоже никто не отменял Код __eeprom Setup eeSetup; ... Setup LocalSetup;// Создаем структуру типа Setup Setup *sptr;// Указатель
LocalSetup = eeSetup; ... *sptr = eeSetup;
Сообщение отредактировал zhevak - Dec 17 2007, 11:52
--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
|
|
|
|
|
Dec 17 2007, 12:36
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(zhevak @ Dec 17 2007, 13:41)  Структура, все элементы которой имеют одинаковый тип, явно напрашивается на то, чтобы быть массивом. Вовсе нет. Смотрите: Код typedef struct { uint8_t Size_X; uint8_t Size_Y; uint8_t Bitmap[]; } bmp_font_t; Здесь Size_X и Size_Y имеют такой же тип, что и члены следующего за ними массива, но включать их в этот массив было бы очень ненаглядно. Как я понял, автор вопроса хранит в структуре данные, которые хоть и имеют один и тот же интегральный тип, но логически не эквивалентны. Если я не прав, то красивым и верным будет решение, предложенное vmp, если же я прав, то подход автора в осмысленным именовании каждого члена безусловно правильный, а для удобства на каких-то операциях работать со структурой как с массивом можно использовать union: Код typedef union { struct { uint8_t member1; uint8_t member2; uint8_t member3; }; uint8_t Array[1]; } setup_t использование здесь массива размером 1 является некоторым хаком чтобы не именовать структуру. При проверке индекса массива нужно использовать sizeof() от union. Если структуре дать имя, тогда можно в качестве размера массива задать sizeof() структуры, но в коде при доступе к членам появляется в общем-то ненужное имя структуры.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Dec 17 2007, 12:52
|
Участник

Группа: Участник
Сообщений: 27
Регистрация: 3-08-07
Из: Орловская обл.
Пользователь №: 29 535

|
Цитата(Сергей Борщ @ Dec 17 2007, 15:36)  Вовсе нет. Смотрите: Код typedef struct { uint8_t Size_X; uint8_t Size_Y; uint8_t Bitmap[]; } bmp_font_t; Здесь Size_X и Size_Y имеют такой же тип, что и члены следующего за ними массива, но включать их в этот массив было бы очень ненаглядно. Как я понял, автор вопроса хранит в структуре данные, которые хоть и имеют один и тот же интегральный тип, но логически не эквивалентны. Если я не прав, то красивым и верным будет решение, предложенное vmp, если же я прав, то подход автора в осмысленным именовании каждого члена безусловно правильный, а для удобства на каких-то операциях работать со структурой как с массивом можно использовать union: Код typedef union { struct { uint8_t member1; uint8_t member2; uint8_t member3; }; uint8_t Array[1]; } setup_t использование здесь массива размером 1 является некоторым хаком чтобы не именовать структуру. При проверке индекса массива нужно использовать sizeof() от union. Если структуре дать имя, тогда можно в качестве размера массива задать sizeof() структуры, но в коде при доступе к членам появляется в общем-то ненужное имя структуры. Вообще-то типы переменных разные, но для упрощения я их привел к одному типу, нехваткой памяти я не жалуюсь... Простите за серость, но адресацию элементов через enum я еще не делал... Pls, не подскажете ли конструкцию???
|
|
|
|
|
Dec 17 2007, 13:27
|

Частый гость
 
Группа: Свой
Сообщений: 152
Регистрация: 11-10-05
Из: Воронеж
Пользователь №: 9 491

|
Цитата(Andrei_S @ Dec 17 2007, 15:52)  Вообще-то типы переменных разные, но для упрощения я их привел к одному типу, нехваткой памяти я не жалуюсь...
Простите за серость, но адресацию элементов через enum я еще не делал... Pls, не подскажете ли конструкцию??? если разные, делайте как делали, это правильно по поводу enum: Код const u8 CONFIG_SIZE = 3; enum Config_Items { baud_rate = 0, parity, stop_bits }; // и т.д. - по необходимости typedef u8 Configuration[CONFIG_SIZE]; Configuration my_config;
for (int i = 0; i < CONFIG_SIZE; ++i) my_config[i] = Read_EEEPROM(i);
...
Set_UART(my_config[baud_rate], my_config[parity], my_config[stop_bits]); ...
|
|
|
|
Сообщений в этой теме
Andrei_S struct - непонятка с косвенной адресацией Dec 17 2007, 09:51 sergik_vrn Цитата(Andrei_S @ Dec 17 2007, 12:51) Set... Dec 17 2007, 10:05 VladislavS Хотите массив - используйте!!!
typedef... Dec 17 2007, 10:18 Andrei_S Спасибо sergik_vrn , попробую...
А насчет массива:... Dec 17 2007, 10:35 sergik_vrn Цитата(Andrei_S @ Dec 17 2007, 13:35) Спа... Dec 17 2007, 10:52  Юрий Санвальд Цитата(sergik_vrn @ Dec 17 2007, 13:52) .... Dec 17 2007, 11:25  Andrei_S Цитата(sergik_vrn @ Dec 17 2007, 13:52) 1... Dec 17 2007, 11:35   Юрий Санвальд Цитата(Andrei_S @ Dec 17 2007, 14:35) ...... Dec 17 2007, 11:48    Andrei_S Цитата(Юрий Санвальд @ Dec 17 2007, 14:48... Dec 17 2007, 12:01     aaarrr Цитата(Andrei_S @ Dec 17 2007, 15:01) Пар... Dec 17 2007, 12:12      Andrei_S Цитата(aaarrr @ Dec 17 2007, 15:12) Ага, ... Dec 17 2007, 12:26       Юрий Санвальд Если уж все элементы однотипные, то чем тогда не п... Dec 17 2007, 12:34       sergik_vrn Цитата(Andrei_S @ Dec 17 2007, 15:26) Име... Dec 17 2007, 12:34     Юрий Санвальд Цитата(Andrei_S @ Dec 17 2007, 15:01) Пар... Dec 17 2007, 12:18   sergik_vrn Цитата(Andrei_S @ Dec 17 2007, 14:35) ...... Dec 17 2007, 12:20    tag Цитата(sergik_vrn @ Dec 17 2007, 15:20) у... Dec 18 2007, 10:45     Andrei_S Цитата(tag @ Dec 18 2007, 13:45) ...как в... Dec 18 2007, 11:48 Юрий Санвальд Цитата(zhevak @ Dec 17 2007, 14:41) ...
С... Dec 17 2007, 12:01    Andrei_S Большое спасибо всем!
Буду пробовать... Dec 17 2007, 13:33 vmp Почитайте про перечислимый тип (enum).
Именно он н... Dec 17 2007, 11:53 digital union {
unsigned char mass[10];
struct... Dec 17 2007, 13:28 digital по поводу enum:
не хорошо, так как заставляет сам... Dec 17 2007, 13:47 MALLOY2 ЦитатаГоспода, что-то не понимаю следующего:
Даю ... Dec 17 2007, 14:40 vet memset(&LocalSetup, 0, sizeof(Setup)) тогда уж... Dec 17 2007, 14:47 MALLOY2 А если такая ситуация
Кодfor (c=0; c<siz... Dec 17 2007, 16:29 Andrei_S Итак, общими усилиями получилось следующее:
имеетс... Dec 18 2007, 08:34  sergik_vrn Цитата(Andrei_S @ Dec 18 2007, 11:34) Ита... Dec 18 2007, 09:00   Andrei_S Цитата(sergik_vrn @ Dec 18 2007, 12:00) я... Dec 18 2007, 10:26  vmp Цитата(Andrei_S @ Dec 18 2007, 11:34) Но,... Dec 18 2007, 13:10 _dem Цитата..как вариант#define BAUD_RATE ... Dec 18 2007, 12:31 Andrei_S КодRead_EEPROM((u8 *)&config.info_... Dec 18 2007, 13:01 _dem Если типов данных сравнительно немного, сделайте о... Dec 18 2007, 14:07
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|