C не имеет языковой поддержки для объектно-ориентированных концепций, таких как конструкторы.
Вы могли бы реализовать это вручную в соответствии с:
typedef struct
{
int field1;
int field2;
} MyObject;
MyObject *MyObject_new(int field1, int field2)
{
MyObject *p = malloc(sizeof(*p));
if (p != NULL)
{
// "Initialise" fields
p->field1 = field1;
p->field2 = field2;
}
return p;
}
void MyObject_delete(MyObject *p)
{
// Free other resources here too
if (p != NULL)
{
free(p);
}
}
void MyObject_doSomethingInteresting(const MyObject *p)
{
printf("How interesting: %d\n", p->field1 * p->field2);
}
Если вы хотите стать действительно продвинутым, вы можете использовать ужасно сложные макросы и указатели функций для эмуляции полиморфизма и всех видов (за счет безопасности типов); см. эту книгу .
См. Также этот вопрос .
См. Также этот ответ на часто задаваемые вопросы , если вы заинтересованы в компиляции объектно-ориентированного C ++ в C.