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