>> | Аноним Четверг 10 Авг 2017 10:05:31 Чт 10 Авг 2017 10:05
No.
1967038
[Мод] ▲>>1967025 Это все круто, но не когда надо лазя по бумажному даташиту и думая над предметной областью их группировать, ошибиться очень легко, что в выборе бит, что в записи хексом. И на первых порах приходится делать длинные цепочки (1 << 2) | (1 << 3) | (1 << 8) ... Это задача машины возиться с константами, и странно, что даже в каком-нибудь шарпе об этом подумали, а в Си морозятся. ▲>>1967030 >1. Нельзя джампать на другие функции, без использования спецаильных функций. А зачем? Это и логически крайне запутает программу, и как ты представляешь себе это уровнем ниже, в смысле, чем забивать неинициализированные параметры новой функции, и как из этой портянки возвращаться? >2. Слишком длинные названия размеров переменных — char, unsigned char, short, unsigned short, int, unsigned int, long long, unsigned long long, мне приходится каждый раз подключать файл, где я затайпдефил char как s8, unsigned int как u32 и так далее. В с99 порешали, включай stdint.h и используй int8_t, uint64_t. В ядре линукса есть s16, u32. >3. Нельзя вызывать функцию с двух разных мест в ней. В смысле? Несколько раз применить рекурсию? Все возможно. Или ты о переходе не в начало? Если да, то п.1 >4. Чтобы писать ассемблреный код, надо ставить asm(), а внутри кучи строк, ограниченные кавычками. А где не так из высокоровневых языков? >5. Это может быть порок не си, а gcc. Когда пишешь ассемблерный код, нельзя вставлять названия переменных и меток. Мне что, теперь следить за расположением каждой переменной и метки и ставить её адрес? На ассемблере ты и так это делать будешь. Ассемблер нужен за вещами, не передаваемыми языком, например, атомарным test and set, или переключением EL между осью, гипервизором и юзерспейсом. На нем логику или даже вычисления глупо, процессоры подстраиваются под выхлоп компиляторов, а не непредсказуемые хаки. Например, раньше было круто ксорами обменять значение двух переменных без третьей, сейчас за это надо бить по рукам, решение в лоб лучше раскладывается в конвейере и в итоге быстрее работает. >6. Мне не нравится цикл for. Он какой-то странный. Я бы сделал 2 цикла. while (условие) {} — обычный, как в си и loop (кол-во раз) {} (или какой-то другое название, чтобы не путать с ассемблерной командной). А если нужен декремент? Или побитовый сдвиг? Или деление на 10 для разложения числа на цифры? Так удобнее использовать один цикл на все, а если нужно ясности, в более высокоуровневых языках есть foreach. Ну и ты про do ... while забыл. В ядре линукса самый употребимый цикл, в виде do { ... } while (0) в составе макросов.
|