Всё-таки, Си - низкоуровневый язык, машинно-зависимый.
Переносимость и повторное использование кода были целями С++ и
Java, но не очень они добились этих целей. А вот вопрос
машинно-зависимости - неоднозначный. Сейчас вот много говорят про
потокобезопасность, защиту памяти и стека, атомарность ит.д. Лет 30
назад такие вопросы не были актуальны. Когда в Windows 2000 через
переполнение стека попёрли вирусы, то на наши strcpy() и т.д.
повесили "чёрную метку". Сейчас многоядерные процессоры требуют thread-safe. В будущем появятся ещё какие-то технологии, для которых сегодняшний код и стандарты не годятся. Жизнь не стоит на месте.