C, как сам язык, не поддерживает концепции программирования ОО. Но это не делает невозможным их использование. Если вы полны решимости и имеете веские основания для использования объектно-ориентированного подхода к программированию на C (вместо, например, C ++), вы можете это сделать.
Конечно, вы не можете достичь многих функций языков более высокого уровня без широкого использования препроцессора, что не очень хорошая идея, поскольку может быть изобретено колесо (в большинстве случаев не очень круглое колесо), но основные концепции ОО, такие как наследование и полиморфизм достижимы довольно простым способом, используя массивы указателей на функции, элементы структуры «базовый тип» в структуре «подтип» и т. д.