Не думайте, что вам нужно отложить свои знания по объектно-ориентированной работе - вы можете "запрограммировать на язык" .
Мне пришлось работать в Си после того, как я в основном имел опыт объектно-ориентированной работы. C допускает некоторый уровень концепций объектов, которые можно преодолеть. На работе мне пришлось реализовать красно-черное дерево на C для использования в алгоритме Sweep-Line , чтобы найти точки пересечения в наборе сегментов. Поскольку в алгоритме использовались разные функции сравнения, я использовал указатели на функции для достижения того же эффекта, что и лямбда-выражения в схеме или делегаты в C #. Это работало хорошо, а также позволяло сбалансированному дереву многократно использоваться.
Другая особенность сбалансированного дерева заключалась в использовании пустых указателей для хранения произвольных данных. Опять же, указатели void и function в C - это боль (если вы не знаете их входов и выходов), но их можно использовать для приблизительного создания общей структуры данных.
Последнее замечание: используйте правильный инструмент для работы. Если вы хотите использовать C просто для овладения процедурной техникой, то выберите задачу, которая хорошо подходит для процедурного подхода. У меня не было выбора в этом вопросе (унаследованное приложение написано на C, и люди требуют мира и отказываются войти в 21-й век), поэтому я должен был быть креативным. C отлично подходит для низких / средних абстракций с компьютера, например, если вы хотите написать программу проверки пакетов в командной строке.