..вах! Всегда ли?.. >Вызов функции в процедуре обработки прерываний - сигнал
>к сохранению ВСЕХ регистров. Человек может помнить (а может и нет)
>какие регистры используются в вызываемой функции.
Зачем помнить, да? Нужно знать. И прописывать в комментариях.
А то, что определено по адресу только во время выполнения кода
(пр.:размещение на стеке передаваемых аргументов) указывать хотя бы
по суммарному размеру. Так сказать, ресурсы, пожираемые ф-цией.
Вообще, если в прерывании не используются ассемблерные вставки,
а только С-шный код, то вот помнить не мешало бы именно
компилятору. Помнить и предупреждать.
>А вдруг, вызываемая функция, в свою очередь, вызывает другую и
>т.д. Что тогда?
Тогда ничего. Ничего страшного: откуда возьмется это "вдруг", если он (человек) сам эти вызовы и написал? А посмотреть за "ширму", а "прощупать"? Эт что ж получается, что настрогать настрогал, а
заботится пусть кто-нибудь другой? Компилятор например... Он-то "позаботится", но за лень придется платить, что и наблюдаем.
Аргумент о вложенных вызовах функций противоречит мнению Bill'a :) :
http://caxapa.ru/m …wwwboard.html?id=43271
Сами по себе вложенные вызовы (да еще и с аргументами) - это уже "работа".
>Самое главное в компиляторе - генерация корректного надежного
>кода. Всякие вставки - на совести программиста, компилятор просто
>страхуется от причуд человека. Что же тут плохого?
Плохо, когда компилятор не дает возможности выбора. Он, прежде
всего, является инструментом, а не каким-то продуктом потребления.
Плохо, когда компилятор "страхует" и решает что-то за меня втихую,
с наглой рожей оставляя меня перед голым фактом. Это скорее нужно
домохозяйкам... или прикладным программистам на Pascal'e.
-
- Всегда! Само собой, программист должен быть более аккуратным, используя ассемблер. Bill(1272 знак., 05.11.2005 23:16, )