【发布时间】:2018-01-26 17:31:05
【问题描述】:
我有一个 C++ 文件,其中到处都是宏,以至于无法阅读,我想要一种方法来用它们的定义替换这些宏,这样我就可以真正看到发生了什么。
到目前为止,我只是右键单击它们,在上下文菜单上选择“转到定义”,复制粘贴它们并手动填写它们。我希望 VS 提供一种方法来用它的定义替换宏并自动填写并删除用于转义每个换行符的斜杠?
我尝试过使用预编译器输出,但至少有一些我想保留的宏,它会删除所有这些宏。它还完全将格式化抛出窗口,您无法知道每行代码来自哪个文件。
假设在我的 table.h 文件中我有:
#define TABLE_SIZE 100
然后在我的 table.cpp 文件中:
int table1[TABLE_SIZE];
int table2[TABLE_SIZE];
我希望能够右键单击并自动替换为:
int table1[100];
int table2[100];
自动填写传入的任何值。
这看起来应该很容易实现,但很难通过 Google 搜索,因为宏通常会替换文本,因此“替换宏”或其他变体不会带来好的结果。
【问题讨论】:
-
文件中有替换选项和快速替换选项。如果需要,两者都使用正则表达式。
-
用它的主体手动替换宏不是一个理想的解决方案。通常宏清理应该涉及一些重构,在这种情况下,您可能想要声明新常量并使用它来声明数组而不是硬编码幻数。
-
是的,问题是这些宏通常有传递给它们的值,即 INTF(IMyInterface, Call) 而在其他地方有 INTF(IMyInterface, Transition) 意味着查找和替换宏的所有实例不可能。这也解决不了转义问题。
-
它们中的大多数实际上并不是常量,它们是被定义为宏的大块代码,仅在项目中使用一次,并且由于它们太多,因此难以阅读。
-
您可以让编译器将预处理后的输出写入文件,然后使用文本差异/合并工具重新组合它们,请参阅:msdn.microsoft.com/en-us/library/8z9z0bx6.aspx
标签: c++ visual-studio macros