Так зачем изобретать человекочитаемую getc(), когда уже есть точно так же понятная read()? (Хотя последняя скорее всего так же написана на Си...)
Пользоваться
getc() гораздо проще чем
read(). А
read() существенно более сложная и разнообразная функция: может прочитать не только один байт, но и любое количество байтов.
Ну и на чём написана
read() не имеет вообще никакого отношения к делу. Хоть на лиспе.
Нет, просто критически настроенный новичок в программировании. Без особого почтения к традициям, но с большим уважением к логике и здравому смыслу.
Значит для Вас открыты все те дороги с тучей раскиданных граблей, по которым мир уже прошёл, налетел, подумал и исправил. А у Вас всё впереди!
Именованные константы придуманы именно для облегчения жизни программисту, особенно не при первом написании кода, а при его поддержке и модификации, когда человек уже давно забыл где просто число 0, где это результат разности двух одинаковых чисел, где нулевой указатель, а где смещение в структуре. И чтобы изменить смещение в структуре не испортив всю программу придётся заново разбираться где в каком смысле использован символ 0. А с именованными константами достаточно просто изменить значение одной из них, вообще не смотря в основной текст программы. Это азы вообще-то.
Ну и про ассемблер скажу, как человек плотно на нём пишущий. Да, при желании можно получить очень хорошую производительность и размер программы. Только Вы забыли про цену этого: время и усилия по написанию программы. И по сопровождению. А производительность нужна вовсе не всегда и не везде, с тем же
getchar() она 100% не нужна. То что Вы будете писать на ассемблере год (не забываем про разную аппаратуру у клиентов!), другой человек напишет на С за неделю. Догадайтесь кто получит следующий заказ и больше заработает.
Оптимальной считается тактика писать всё на С и потом лишь самые внутренние вычислительные циклы
при необходимости переписывать на ассемблере. Писать на ассемблере
всё — извращение (писал, знаю). Для компьютеров компиляторы ЯВУ достаточно хороши и улучшить их код без глубокого знания внутренностей процессора весьма сложно (а новичок скорее испортит код чем улучшит).
С МК ситуация та же: для всех есть как минимум С, а часто и много других ЯВУ, на асме пишут лишь извращенцы (вроде меня) или лишь небольшие кусочки самого нагруженного кода (типичный пример — обработчики прерываний). Ну или когда размер исполняемого кода критичен (по цене МК), но тогда почти всегда программа достаточно проста (сотни-тысячи строк, не более, дальше уже проще на С десятки-сотни строк написать, да, в десятки и более раз меньше).
Вы похоже даже не пытались писать на асме ничего серьёзнее десятка команд, а то бы знали что например в WinAPI, которым легко пользоваться из асма, есть аналог
printf(), но нет аналога
scanf() и писать синтаксический разбор входных текстовых строк и параметров командной строки вам придётся самому. А корректный разбор, на асме напомню, с обработкой возможных ошибок ... Это совсем не десяток и не сотня строк! Всего лишь на чисто служебное действие, ещё даже не основной код программы. Я вот до сих пор (больше десятка лет) ленюсь и потому мои программы на асме снаружи практически никак не управляются, каждый раз приходится менять исходный код и перекомпилировать. Потому что когда надо такую обработку, то речь о производительности уже не идёт и вполне можно пользоваться ЯВУ, а нагруженный асм код убрать в dll и спокойно его оттуда вызывать из любого языка.
Короче, если не хотите годами ходить по уже изученным граблям — интересуйтесь мировым опытом. И следуйте ему. А не стройте из себя нигилиста.