来自C++中的思考 - 第1卷:
在第二遍中,代码生成器遍历解析树并为树的节点生成汇编语言代码或机器代码.
至少在GCC中,如果我们给出生成汇编代码的选项,编译器会通过创建包含汇编代码的文件来服从.但是,当我们只是在gcc没有任何选项的情况下运行命令时,它是否在内部不生成汇编代码?
如果是,那么为什么需要首先生成汇编代码然后将其转换为机器语言?
当我运行我的代码(任何代码)时,在调试模式下我可以选择“反汇编”。
我知道“反汇编”是从机器代码(存储在目标文件中的“1”和“0”)创建汇编代码。
所以,我可以假设当我在 Visual Studio 中编译我的代码时,在 C/C++ 代码到机器代码/目标文件之间没有“汇编/汇编”阶段,如果我想查看汇编代码,我需要要求 Visual Studio 将其从目标文件反汇编为程序集。
所以我的问题是:
我说的对,除了反汇编就没有办法看到asm了吗?
(如果 1 为否):为什么 Visual Studio 的调试器显示“反汇编”选项,而不是“汇编”?
Clang/GCC 是否有汇编阶段,或者 C/C++ 代码是否直接编译为目标代码?
编者按:对于 GCC 与大多数其他主流 C/C++ 编译器(如 clang/LLVM 和 MSVC),3 的答案实际上有所不同。由于这是与 MSVC 的工作方式不同的问题,因此该部分是这些其他 SO Q&A 的副本: