可视化 C/C++ 宏扩展

长的宏可能难以读取。 Visual Studio 现在可以展开 C 和 C++ 宏。 可以在剪贴板上获取展开的宏,将宏直接替换为其展开值,然后逐步展开宏,查看其在每个展开阶段的样子。 在本文中,可试验所有这些功能。

先决条件

  • Visual Studio 17.5 或更高版本

创建示例

  1. 启动 Visual Studio 2022 版本 17.5 或更高版本,然后创建 C++ 控制台应用。

  2. 将默认代码替换为:

    #include <iostream>
    
    #define MASS 10.0
    #define ACCELERATION 20.0
    #define SPEED 5.0
    #define TIME 2.0
    #define DISTANCE() (SPEED * TIME)
    #define FORCE()(MASS * ACCELERATION)
    #define WORK()(FORCE() * DISTANCE())
    #define POWER()(WORK()/TIME)
    
    int main()
    {
        std::cout << "Distance: " << DISTANCE() << std::endl;
        std::cout << "Force: " << FORCE() << std::endl;
        std::cout << "Work: " << WORK() << std::endl;
        std::cout << "Power: " << POWER() << std::endl;
    }
    

复制展开的宏

即使涉及多个预处理器步骤,也可以使用以下步骤检查宏的扩展值:

  1. 将光标置于示例的 main() 中的 POWER 宏上。

  2. 将鼠标悬停在宏上时,将显示选项“复制”、“展开内联”、“可视化扩展”和“联机搜索”选项:

    宏窗口的屏幕截图,其中显示了 POWER 宏扩展。

    宏窗口会在 POWER 上打开,以显示其展开到 (((10.0 * 20.0) * (5.0 * 2.0)) / 2.0)。 用于复制、展开内联、视觉扩展和联机搜索的选项会显示在窗口底部。

  3. 选择“复制”。

  4. POWER 行后创建一条注释,然后选择粘贴 (CTRL+V)。 宏展开后如下所示(如宏附近的注释):// (((10.0 * 20.0)* (5.0 * 2.0)) / 2.0). 此操作的键盘快捷键为 Ctrl+M、CTRL+C。

展开宏内联

使用以下步骤展开宏内联,将宏替换为其扩展:

  1. 将光标置于示例的 main() 中的 POWER 宏上。
  2. 将鼠标悬停在宏上时,将显示选项“复制”、“展开内联”、“可视化扩展”和“联机搜索”选项
  3. 选择“展开内联”。 POWER() 宏会替换为其展开值:std::cout << "Power: " << (((10.0 * 20.0) * (5.0 * 2.0)) / 2.0) << std::endl;。 此操作的键盘快捷键为 CTRL+M、CTRL+I。

可视化宏扩展

可以一步步展开宏。 当存在嵌套宏,并希望逐步查看扩展时,这非常有用。 若要可视化 WORK 宏的宏扩展,请使用以下步骤:

  1. 将光标置于示例的 main() 中的 WORK 宏上。

  2. 将鼠标悬停在宏上时,将显示选项“复制”、“展开内联”、“可视化扩展”和“联机搜索”选项。

  3. 选择“可视化扩展”。 此操作的键盘快捷键依次为 CTRL+M 和 CTRL+V。

  4. 此时会显示宏扩展窗口。 可以看到 WORK 宏的第一个扩展:(FORCE() * DISTANCE())

    宏扩展窗口的屏幕截图,该窗口允许一次单步执行 WORK 宏扩展。

    宏可视化窗口在 FORCE 上打开,以显示它最初展开到 (FORCE()*DISTANCE())。 窗口中有单尖括号,用于每次向前和向后移动一个扩展。 双尖括号会完全展开或完全撤消宏扩展。

  5. 单击右尖括号以展开 FORCE 宏。 窗口现在显示 FORCE 宏扩展:(MASS * ACCELERATION) * DISTANCE()

  6. 单击右尖括号以展开另一个步骤。 窗口现在显示 FORCE 宏扩展:((10.0 * ACCELERATION) * DISTANCE())

继续展开宏以查看 WORK 宏的完整扩展,即 ((10.0 * 20.0) * (5.0 * 2.0))。 可以使用双尖括号完全展开宏,或将扩展反转到第一个扩展级别。

另请参阅

在 Visual Studio 中查看 UE 宏