c++ - 扩展宏进行调试?

标签 c++ c visual-c++ visual-studio-2017

我是使用宏函数的新手,我知道在使用宏函数时在操作顺序方面存在一些缺陷。有没有一种方法可以在预处理器处理完宏后展开它,以便我可以看到它的样子?

在 VS2017 中,我尝试了 Processor > C/C++ > Preprocessor > Preprocess to a file that creates an *.i file 但它大约有 50k 行长,我似乎找不到我的宏扩展到的地方。

编辑:我知道宏是坏消息,但是,我正在涉足的代码库大量使用了它们,所以我试图更好地理解它们。

最佳答案

In VS2017, I've tried Processor > C/C++ > Preprocessor > Preprocess to a file which creates an *.i file but it's around 50k lines long and I can't seem to find where my macro was expanded to.

您可以通过在使用宏的行之前声明一个虚拟变量来帮助自己。

例如

extern int dummyIntVariable;
MY_COMPLICATED_MACRO(arg1, arg2);

之后,您在 .i 文件中查找 dummyIntVariable。它下面的行将包含 MY_COMPLICATED_MACRO 扩展到的内容。

或者正如@Sneftel 在评论中指出的那样,您可以使用任何旧字符串来帮助您浏览 .i 文件。

THIS IS A UNIQUE STRING
MY_COMPLICATED_MACRO(arg1, arg2);

由于文件只是经过预处理,因此应该也可以。

关于c++ - 扩展宏进行调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50179181/

相关文章:

C 在 32 位上定义 64 位

c++ - 将 Visual C++ 委托(delegate)传递给 native C++ 类

c++ - 初始化 Glew - Visual Studio 2012 中的链接器错误

c++ - Select() + UDP 导致打开的文件过多

c - 在字对齐处理器上处理未对齐数据的最快方法?

c - C 语言中 execlp() 函数的使用

visual-studio - 如何在 VC++ 2010 和 VC++ 2008 中无缝开发同一个作品?

c++ - 如何比较两个迭代器以在 VS2013 上进行单元测试?

c++ - 并行嵌套 For 循环但按顺序输出结果

c++ - 在 FILE 对象上使用 fstreams