то есть главная проблема в С — это отсутствие elsif? не
— отсутствие модулей, заменяемое .h файлами (ODR и зависимости при билде на совести разработчика)
— препроцессор
— слабая система типов, почти все приводится ко всему, int foo() может принимать любые аргументы, прототипы функций вообще не требуются и т. п.
— сумасшедшие правила старшинства операторов, из-за чего на практике, применяя битовые операциях, ставят скобки везде, как в лиспе
— UB, IDB и strict aliasing, приводящие к разной семантике в разных компиляторах
— стандартные типы (int etc.) разные на разных платформах, union и bitfields не portable, выравнивания тоже
и т. п.,
из-за чего в ответственных применениях пишут длинные списки чего не надо делать типа
http://caxapa.ru/thumbs/468328/misra-c-2004.pdf и требуют их соблюдения, хотя это все не более чем полумеры