> Это, кстати, миф, потому-то Си и требует различных расширений под каждую платформу.А это уже на усмотрение програмера - насколько портабельным он хочет быть. А знаешь, если ты уповал на системный вызов который реализован только в Linux - ты таки будешь Linux-only программой. На любом ЯП, который в принципе системные вызовы делать позволяет. Просто потому что ты зависишь от фичи которую другие системы/рантаймы тебе не предоставляют.
> Для многих оказывается сюрпризом, когда их программа на "высокоуровневом ассемблере",
> валится на другой платформу из-за, к примеру, непригодного выравнивания
Если код не писан совсем уж левой пяткой - таки все обычно просто работает. Можно наверное найти особо экзотичные платформы, но там как правило кроме экзотичного диалекта си и нет больше ничего. Может еще ассемблер какой, еще более экзотичный. Типа C для DSP с 16-битным char просто потому что стандарт не запрещает, а 8 битов адресовать проц не умеет в принципе, потому что для него минимальный юнит - 16 битов.
> или просто из-за других размерностей целых, пусть и в большую сторону.
Типы данных с фиксированным размером - это C99, которому 17 лет. Если до кого за 17 лет не дошло - наверное это не си виноват.
> Второе несоответствие ассемблеру - это оптимизации современных компиляторов,
> изменяющих изначальную программу, порой, до неузнаваемости. Ассемблеры так не поступают.
Тем не менее, сейчас стало модно писать в SIMD-стиле на C - когда делаются generic операции с generic переменными энного размера а компилер это раскладывает в регистры которые у его проца. Гугл в libvpx вынес половину neon/sse асма в пользу simd intrinsics на си.