@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();
  • Вопрос задан
  • 7165 просмотров
Решения вопроса 2
@MiiNiPaa
Работать это будет. Главное следить, если в структуре будет указатель, вполне возможно что нужно глубокое копирование.

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

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

Войти через центр авторизации
Похожие вопросы