делать её opaque struсt? Я хочу написать свой вектор, нормален ли такой подход? Принято ли так писать в Си?
// vector.h
typedef struct _vector * vector;
void append(vector v, int x);
// vector.c
struct _vector {
int size;
int capacity;
int data[];
};
Ну да, вполне норм, правда непонятно, почему поля размера инт. (Ну и по аналогии со строками можно было бы сделать объединение для коротких векторов). Ну и лично я бы сделал 1 константный объект с функциями. Ну а также логичнее наверное было б мапу сделать вместо массива, что б не попипастить вектор при расширении. Хотя в этом случае чуть увеличивается время доступа к элементу на константу.
принято, если нужно скрывать поля, иметь всегда размер указателя (даже если добавить новые поля или убрать старые) и допустимо использовать динамическую аллокацию (через malloc или GC)
Обсуждают сегодня