Мониторинг обменных курсов валют
18c0693f

Удаление лишних вызовов функций


Удаление лишних выражений ни в коем случае нельзя распространять на удаление функций! (Во всяком случае, без дополнительных ухищрений, разговор о которых выход за рамки этой статьи).

Рассмотрим следующий пример:

c=func_1(0x666,0x777);

c=func_2(0);

printf("%x\n", c);

На первый взгляд, от вызова функции func_1 можно безболезненно избавиться – возращенное ею значение никак не используется, и переменной 'c' тут же присваивается результат работы func_2, который и выводится на экран. Но задумайтесь: что произойдет, если функция func_1

помимо возращения значения делает и другую работу? Ну, скажем, записывает переданные ей аргументы в дисковый файл. Правильно, - удаление этой функции нарушит нормальную работу программы!

Таким образом, оптимизирующий компилятор не должен сокращать вызовы функций, однако, он может (и должен) не присваивать возращенное значение переменной, если оно действительно нигде не используются (см. "Удаление лишних присвоений").

Ни один из трех рассматриваемых компилятором не удаляет "лишние" вызовы функций.





Все публикации раздела



Самый выгодный курс обмена валюты