Макрос на самом деле не является функцией. все, что вы определяете как макрос, дословно публикуется в вашем коде до того, как компилятор его увидит, препроцессором. Препроцессор - это просто инструмент для разработчиков программного обеспечения, который позволяет различным абстракциям лучше структурировать ваш код.
Функция, встроенная или иным образом известная компилятору, и может принимать решения о том, что с ней делать. Ключевое слово inline
, предложенное пользователем, является всего лишь предложением, и компилятор может переопределить его. Именно это переопределение в большинстве случаев приведет к улучшению кода.
Еще один побочный эффект того, что компилятор знает о функциях, заключается в том, что вы потенциально можете заставить компилятор принимать определенные решения - например, отключить встраивание вашего кода, что позволит вам лучше отлаживать или профилировать код. Вероятно, есть много других вариантов использования встроенных функций по сравнению с макросами.
Макросы очень мощные, и в подтверждение этого я бы привел google test и google mock. Есть много причин использовать макросы: D.
Простые математические операции, которые связаны друг с другом с помощью функций, часто указываются компилятором, особенно если функция вызывается только один раз на этапе перевода. Поэтому я не удивлюсь, что компилятор принимает за вас встроенные решения, независимо от того, указано ключевое слово или нет.
Однако, если компилятор этого не сделает, вы можете вручную выровнять сегменты вашего кода. Если вы сгладите это, возможно, макросы послужат хорошей абстракцией, ведь они представляют семантику, аналогичную «реальной» функции.
The Crux
Итак, вы хотите, чтобы компилятор знал определенные логические границы, чтобы он мог создавать более качественный физический код, или вы хотите принудительно принимать решения на компиляторе, выпрямляя его вручную или используя макросы. Промышленность склоняется к первому.
В этом случае я бы склонялся к использованию макросов, просто потому что он быстрый и грязный, без необходимости изучать намного больше. Однако, поскольку макросы являются абстракцией разработки программного обеспечения, а поскольку вы заинтересованы в коде, который генерирует компилятор, если бы проблема стала немного более сложной, я бы использовал шаблоны C ++, так как они были разработаны для тех задач, о которых вы задумывались.