可视化 C/C++ 宏扩展
长的宏可能难以读取。 Visual Studio 现在可以展开 C 和 C++ 宏。 可以在剪贴板上获取展开的宏,将宏直接替换为其展开值,然后逐步展开宏,查看其在每个展开阶段的样子。 在本文中,可试验所有这些功能。
先决条件
- Visual Studio 17.5 或更高版本
创建示例
启动 Visual Studio 2022 版本 17.5 或更高版本,然后创建 C++ 控制台应用。
将默认代码替换为:
#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; }
复制展开的宏
即使涉及多个预处理器步骤,也可以使用以下步骤检查宏的扩展值:
将光标置于示例的
main()
中的POWER
宏上。将鼠标悬停在宏上时,将显示选项“复制”、“展开内联”、“可视化扩展”和“联机搜索”选项:
宏窗口会在 POWER 上打开,以显示其展开到 (((10.0 * 20.0) * (5.0 * 2.0)) / 2.0)。 用于复制、展开内联、视觉扩展和联机搜索的选项会显示在窗口底部。
选择“复制”。
在
POWER
行后创建一条注释,然后选择粘贴 (CTRL+V)。 宏展开后如下所示(如宏附近的注释):// (((10.0 * 20.0)* (5.0 * 2.0)) / 2.0).
此操作的键盘快捷键为 Ctrl+M、CTRL+C。
展开宏内联
使用以下步骤展开宏内联,将宏替换为其扩展:
- 将光标置于示例的
main()
中的POWER
宏上。 - 将鼠标悬停在宏上时,将显示选项“复制”、“展开内联”、“可视化扩展”和“联机搜索”选项
- 选择“展开内联”。
POWER()
宏会替换为其展开值:std::cout << "Power: " << (((10.0 * 20.0) * (5.0 * 2.0)) / 2.0) << std::endl;
。 此操作的键盘快捷键为 CTRL+M、CTRL+I。
可视化宏扩展
可以一步步展开宏。 当存在嵌套宏,并希望逐步查看扩展时,这非常有用。 若要可视化 WORK
宏的宏扩展,请使用以下步骤:
将光标置于示例的
main()
中的WORK
宏上。将鼠标悬停在宏上时,将显示选项“复制”、“展开内联”、“可视化扩展”和“联机搜索”选项。
选择“可视化扩展”。 此操作的键盘快捷键依次为 CTRL+M 和 CTRL+V。
此时会显示宏扩展窗口。 可以看到
WORK
宏的第一个扩展:(FORCE() * DISTANCE())
宏可视化窗口在 FORCE 上打开,以显示它最初展开到 (FORCE()*DISTANCE())。 窗口中有单尖括号,用于每次向前和向后移动一个扩展。 双尖括号会完全展开或完全撤消宏扩展。
单击右尖括号以展开
FORCE
宏。 窗口现在显示FORCE
宏扩展:(MASS * ACCELERATION) * DISTANCE()
。单击右尖括号以展开另一个步骤。 窗口现在显示
FORCE
宏扩展:((10.0 * ACCELERATION) * DISTANCE())
。
继续展开宏以查看 WORK
宏的完整扩展,即 ((10.0 * 20.0) * (5.0 * 2.0))
。
可以使用双尖括号完全展开宏,或将扩展反转到第一个扩展级别。