Como Malabarba ya ha explicado, las macros se expanden durante la compilación de bytes. Si no se compila un archivo, las macros se expanden cuando se carga el archivo (expansión de macro ansiosa).
Sin embargo, no confíes en esto. Es muy mal estilo. En general, no puede esperar que el código que usa su macro se compile realmente, y generalmente debe ejecutar la menor cantidad de código posible durante la compilación. Específicamente, use macros escasamente y solo si no hay otra forma. Como regla general, use macros solo para sintaxis y nunca para semántica (o funcionalidad).
Las macros son una abstracción permeable. Su expansión está codificada en el código de destino en el momento de la compilación, y no se puede cambiar retrospectivamente. El código de destino depende posteriormente de la implementación específica de la macro en el momento de la expansión. Específicamente, depende de todas las API internas utilizadas en el cuerpo de la macro.
En consecuencia, no puede cambiar nada de esta API, ni nada en lo que se base la expansión de macros, sin romper ningún código compilado contra su macro.
El uso liberal de las macros para la funcionalidad allana el camino hacia el infierno de la dependencia .