Недавно я обнаружил кодовую базу, которая поддерживает использование макросов вместо внешних встроенных функций. Используемый здесь язык - C99, а конкретная реализация c особенно чувствительна к производительности (и поэтому аргумент, приведенный для использования макросов, заключается в том, чтобы избежать вызовов функций / установки фрейма стека для часто вызываемых функций).
В качестве улучшения читабельности я предложил удалить макрос в пользу внешних встроенных функций. Например, вместо:
#define FooBar(_AnArg, _AnotherArg) \
{ \
if (_AnotherArg) \
{ \
... \
} \
else \
{ \
... \
} \
}
Я предлагаю:
extern inline void FooBar(void* anArg, bool anotherArg) {
...
}
При просмотре сгенерированной сборки моя функция выглядит правильно встроенной и, следовательно, такой же эффективной, как и макрос в то время как его легче читать и отлаживать.
Есть ли какие-либо соображения о выделении функций, которые я пропускаю? Есть ли другие преимущества использования макросов, которые я не рассматриваю?