реклама на сайте
подробности

 
 
> Присвоение значения структуры
Student2
сообщение Aug 6 2009, 12:21
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 83
Регистрация: 4-08-09
Из: Болгария / София
Пользователь №: 51 737



Если у нас структура:

typedef struct
{
uint8_t X;
uint8_t Y;
} point_t;

и две переменные

point_t var1 = {.X = 2, .Y = 3};
point_t var2 = {.X = 4, .Y = 5};

после выполнения

var1 = var2;

что будет в var1?

Я вижу что IAR поставил var1.X = 4 , var1.Y = 5
Я тоже увидел что если первая стуктура дефинирована в ЕЕПРОМ а вторая в RAM то будет произходить програмирование ЕЕПРОМ

Вопрос в том - можно ли гарантировать что компилер будеть заботится об копирование всех полей при присвоения значения между двумя одиноковые структуры (даже если они довольно тежелые)?

Извините за незнание, можеть быть ето просто указано в ANSI C стандарте...

Другой вопрос - что будет произходить при typecast, если две структуры не одного типа. Например:

typedef struct
{
uint8_t data[3];
} arr_t;


point_t var1 = {.X = 2, .Y = 3};
arr_t var2 = {1,2,3};

var1 = (point_t)var2; /* что будет в var1 ? */
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SM
сообщение Aug 6 2009, 18:09
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(Student2 @ Aug 6 2009, 16:21) *
var1 = (point_t)var2; /* что будет в var1 ? */


А вот так будет то, что ожидается...
var1 = *(point_t*)&var2; /* что будет в var1 ? */
Go to the top of the page
 
+Quote Post
Student2
сообщение Aug 6 2009, 18:37
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 83
Регистрация: 4-08-09
Из: Болгария / София
Пользователь №: 51 737



Спасибо - сейчас все понятно!
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 19:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.01372 секунд с 7
ELECTRONIX ©2004-2016