@Ship63
Си-программист

Копирование структур в Си напрямую через оператор присваивания, насколько это правильно?

Для копирования структур в Си пользуюсь операцией присваивания (=), компилятор (gcc) ошибки и предупреждения не даёт. Также делаю возврат структуры из функции.
Вопрос: насколько это правильно? Где можно прочитать об этом?
Пример:
struct sa { double d, int i };
struct ta { struct sa a, struct sa b, int c[12]};
typedef struct ta ta;
static ta ta1;
ta func(void) { return ta1 };
ta ta2 = func();
  • Вопрос задан
  • 7426 просмотров
Решения вопроса 2
@MiiNiPaa
Работать это будет. Главное следить, если в структуре будет указатель, вполне возможно что нужно глубокое копирование.

С другой стороны, возврат по значению из функции, если компилятор не умеет в copy-elision, дорог. Именно поэтому стандартная библиотека так не делает.
Ответ написан
Комментировать
Присваивание структур соответствует стандарту ANSI C, почитать можно в Кернигане-Ритчи (кроме самых ранних изданий).
P.S. передача и возврат из функций тоже соответствует стандарту ANSI C. Но как заметили выше, надо иметь ввиду, что при передаче и возврате из функций осуществляется копирование структуры, что обычно менее эффективно, чем передача по указателю.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы