Answers:
正如Malabarba已经解释的那样,宏在字节编译期间进行了扩展。如果未编译文件,则在加载文件时扩展宏(急切的宏扩展)。
但是不要依赖于此。这是非常糟糕的风格。通常,您不能指望使用您的宏的代码实际上会被编译,并且通常应在编译过程中运行尽可能少的代码。特别是,只有在没有其他方法的情况下,才很少使用宏。根据经验,仅将宏用于语法,而不能将其用于语义(或功能)。
宏是一个泄漏的抽象。它们的扩展在编译时被硬编码到目标代码中,并且不能追溯地更改。随后,目标代码取决于扩展时宏的特定实现。具体来说,它取决于宏主体中使用的所有内部API。
因此,在不破坏针对您的宏编译的任何代码的情况下,您无法更改任何此API或宏扩展所依赖的任何内容。
宏对功能的自由使用为依赖地狱铺平了道路。