Я читал об ООП в C, но мне никогда не нравилось, что вы не можете иметь закрытые данные-члены, как в C++. Но потом мне пришло в голову, что можно создать 2 структуры. Один определяется в заголовочном файле, а другой определяется в исходном файле.
// =========================================
// in somestruct.h
typedef struct {
int _public_member;
} SomeStruct;
// =========================================
// in somestruct.c
#include "somestruct.h"
typedef struct {
int _public_member;
int _private_member;
} SomeStructSource;
SomeStruct *SomeStruct_Create()
{
SomeStructSource *p = (SomeStructSource *)malloc(sizeof(SomeStructSource));
p->_private_member = 42;
return (SomeStruct *)p;
}
Отсюда вы можете просто преобразовать одну структуру в другую. Считается ли это плохой практикой? Или это делается часто?