Приведение типа, подобное этому, должно разрешить ошибку компилятора:
ModBusIDReg = (my_reg)const_ModBusIDReg;
Или вы можете использовать memcpy () :
memcpy(&ModBusIDReg, &const_ModBusIDReg, sizeof(my_reg));
(Sidenote при использовании memcpy (): в некоторых случаях может возникнуть проблема с выравниванием памяти. Но я не эксперт c. Использование специфичных для компилятора атрибутов подобно упакованных в случай GCC может помочь, когда вы определяете структуру, в зависимости от платформы, компилятора, используемых типов переменных.)
Вы также можете копировать элементы структуры индивидуально в пользовательской функции копирования и инициализировать неиспользуемые части, если таковые имеются. Это было бы чисто, очень ясно / явно, и похоже на конструктор копирования / оператор присваивания, используемый в C ++ (глубокие копии обрабатываются правильно).
редактирование:
Поскольку я не могу добавить комментарий выше после вашего последнего редактирования, я добавляю комментарий здесь:
. / Source / functions.c: 609: 16: ошибка: 'my_reg' не объявлен (первое использование в
эта функция) ModBusIDReg = (my_reg) const_ModBusIDReg;
В C вы можете использовать typedef в ваших выражениях типа struct, чтобы избежать повторения ключевого слова struct во всем вашем коде (подробно объяснено здесь или там ):
typedef struct { ... } foo;
foo x;
Вот пример, иллюстрирующий упомянутые идеи сверху:
/* gcc -Wall -o copy_test copy_test.c && ./copy_test */
#include <stdio.h>
#include <string.h>
typedef struct {
int var;
} my_struct;
int my_copy_func(my_struct *dst, const my_struct *src)
{
if (!dst || !src)
return -1;
dst->var = src->var;
return 0;
}
int main()
{
const my_struct a = { .var = 42 };
my_struct b, c, d;
c = (my_struct)a;
memcpy(&b, &a, sizeof(b));
my_copy_func(&d, &a);
printf("b.var = %d\r\n", b.var);
printf("c.var = %d\r\n", c.var);
printf("d.var = %d\r\n", d.var);
return 0;
}