检查 C++ 编译器隐式生成的代码

Posted

技术标签:

【中文标题】检查 C++ 编译器隐式生成的代码【英文标题】:Checking the code generated implicitly by the C++ compiler 【发布时间】:2014-07-21 05:01:02 【问题描述】:

有没有办法(g++ 选项?)(例如所有默认构造函数/析构函数)?

拥有生成的 C++ 代码是理想的,但至少程序集是好的。使用:

g++ -S -g -O0 <file.cpp>

没有给我任何带有生成的构造函数/析构函数的标签。

【问题讨论】:

根据这些 ctors/dtors 执行的操作,它们可能会被内联。 另外,gcc.godbolt.org 对此非常有帮助。例如,goo.gl/vB41Mi。 它几乎可以肯定根本不会生成 C++ 代码,只会在某处生成汇编。在使用该类的文件上试一试。 您真正想要实现什么?听起来您有解决方案,但我们没有问题:-) 【参考方案1】:

我认为-fdump-tree-original 选项与您所能获得的一样接近。不幸的是,它会显示您自己的代码和自动生成的代码,但它不会标记哪个是哪个。然而,它是 GCC 转储中可读性最强的,它会在执行任何优化之前显示生成的代码。

另一种选择是使用-fdump-translation-unit。这会创建一个原始的树转储,其中包含所有内容。编译器组成的节点将被标记为“人工”。然而,这种格式对人类来说并不容易阅读,即使对于一个微不足道的源文件,它也有很多内容。要从中获取任何有用的信息,您可能需要编写一个程序来读取它,然后遍历树以找到您感兴趣的节点并将它们打印出来,以更易读的格式。

【讨论】:

以上是关于检查 C++ 编译器隐式生成的代码的主要内容,如果未能解决你的问题,请参考以下文章

C++编译器自动生成的堆栈保护检查

C++编译器自动生成的堆栈保护检查

c++ 隐式复制构造函数是不是复制数组成员变量? [复制]

剖析 C++ 代码编译速度

如何将javascript代码编译为c++或java

C++ 类的隐式转换