Expanding macros for debugging?
我是使用宏函数的新手,并且我了解使用宏函数在操作顺序方面存在一些陷阱。在预处理程序处理完宏之后,是否可以扩展宏,以便可以看到它的外观?
在VS2017中,我尝试对Processor> C / C> Preprocessor>进行预处理,以创建一个创建*.i文件的文件,但该文件的长度约为5万行,我似乎找不到我的位置宏扩展为。
编辑:我知道宏是坏消息,但是,我要介入的代码库相当多地使用了它们,因此我试图更好地理解它们。
- 如果您扩展宏,您将获得很多代码来查看-至少在C语言中不应该使用宏的众多原因之一。
-
理解-不幸的是,Ive介入的代码库使用了它们,因此Im试图弄清楚如何理解它们。
-
如果您使用的是类似Eclipse的IDE,则只需将鼠标悬停在宏上,它就会在弹出窗口中展开。
-
我正在使用VS2017,当我将鼠标悬停在宏上时,它只会告诉我所看到的内容。
-
添加到@Galiks评论-您可以逐步查看扩展,然后了解顺序。
-
一些编译器具有命令行开关,该命令行开关允许转储预处理的源文件。检查您的编译器的选项。
-
创建该.i文件的选项可能是您最好的选择。但是:搜索是您的朋友!将文件读入一个好的文本编辑器,然后搜索您知道与您感兴趣的宏扩展接近的一些关键字或函数调用,您应该可以找到它。
-
@ThomasMatthews他们已经尝试过了,"但是它大约有5万行,而且我似乎找不到我的宏扩展到的位置。"
-
"对使用宏函数不熟悉"-现在就学习:根本不使用宏(除非在少数情况下确实/不幸地是唯一的选择,否则除外)。
-
@Steve Summit-当然。我只是提供一般建议。甚至在很多情况下,甚至可以将继承的宏重写为适当的函数;-)
-
@Steve Summit在我的书中直言不讳==好。我只是想确定不要使用宏的意义。
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.
您可以通过在使用宏的行之前声明一个虚拟变量来帮助自己。
例如
1 2
| extern int dummyIntVariable;
MY_COMPLICATED_MACRO(arg1, arg2); |
之后,您在.i文件中寻找dummyIntVariable。它下面的行将包含MY_COMPLICATED_MACRO扩展到的内容。
或者就像@Sneftel在注释中指出的那样,您可以使用任何旧字符串来帮助您浏览.i文件。
1 2
| THIS IS A UNIQUE STRING
MY_COMPLICATED_MACRO(arg1, arg2); |
由于将对文件进行预处理,因此也应该可以使用。
- 如果只进行预处理,则无需声明哑变量。
-
@Sneftel,哑变量可用于浏览OP在.i文件中看到的50k行。
-
不,我的意思是,代码不需要编译,只需预处理即可。您只需将THIS IS A UNIQUE STRING放入其中,然后grep即可。
-
@Sneftel,我明白了。是的,那也是一个选择。