Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Насколько разумно использовать лишь макросы вместо функций в Си?

Андрей Симонович Мастер (1934), на голосовании 15 часов назад
Ну, конечно, когда это позволяет ситуация.

Проект не особо крупный и является сугубо личным.

Слыхал я, что подобные практики увеличивают производительность программного обеспечения за счёт отсутствия затрат на вызов функции.

Иль же стоит применять встраиваемые функции? Хотя некоторые компиляторы способны игнорировать их встраиваемость.
Голосование за лучший ответ
Андрей Высший разум (457357) 1 месяц назад
Абсолютно неразумно. Макрос - это костыль. Типичный для 1970 года, но смотрящийся анахронизмом времён динозавров в 2024 году.

Использование макросов приводит к увеличению объёма машинного кода. Но совсем не обязательно приводит к его ускорению: монолит дикого размера, полученный в результате неумеренного использования макросов, встроенному в компилятор оптимизатору обработать куда сложнее, чем относительно небольшую подпрограмму.

Да, вызов функции - это затраты. Но затраты совсем небольшие. Правильный выбор алгоритмов и качественная их реализация даёт несравнимо больше для улучшения производительности, чем такая экономия на спичках.
Андрей СимоновичМастер (1934) 1 месяц назад
Весьма информативно.

Но стоит ли насовсем отвергнуть применение макросов? Иль же имеется некий компромисс?
Андрей Высший разум (457357) Андрей Симонович, В C совсем без макросов не обойтись. И макросы уровня min / max, упрощающие запись выражений, имеет смысл использовать. Но не надо объявлять макросами сложные программные конструкции: if, switch, for и т.д. в макросы лучше не помещать.
Серый Верный Профи (763) 1 месяц назад
Привет! Встраиваемые-невстраиваемые правильно говоришь, на усмотрение твоего компилятора. Насчет макросов, естественно в разы быстрей будет работать функции при частом обращении, но есть небольшая закавырка, в многопоточном программировании макросы не будут работать как функции, получится что макрос будет работать как функция с общим для всех потоков куском памяти
Похожие вопросы