VC ++'生成代码',这是什么意思?

时间:2009-11-22 11:52:47

标签: c++ visual-studio visual-c++

在visual studio中进行编译时,编译器会根据自己的判断输出:

1>生成代码......

这到底在做什么?

4 个答案:

答案 0 :(得分:13)

它正在做它所说的:它正在生成机器代码。许多编译器将C / C ++源代码转换为一些中间内部表示,稍后将其用作生成实际机器代码的源。 Visual C ++编译器(和许多其他编译器一样)在批处理中执行此操作:首先,它将一堆源文件转换为该中间表示,然后将它们全部转换为机器代码(然后开始处理下一批处理)。当您看到“生成代码”消息时会发生这种情况。

我不知道将源文件拆分成批次的确切逻辑。也许它只是按大小工作:一旦到目前为止生成的所有中间表示的总大小达到某种限制,它就会切换到“生成代码”模式。也许还有其他一些逻辑在那里工作。

在任何情况下都要注意,在这种情况下,不合格的术语“代码”不是指源代码,这意味着它与模板和/或预处理器或类似的东西无关。此外,参考具有不合格“代码”的C源(与合格的“代码”相对)是一个非常小众的事情,更多的是在营销部门的家里而不是实际的程序员。在程序员级别,没有人将C源称为“代码”:)

答案 1 :(得分:3)

编译器同时给出多个输入文件,它一次读取(解析)其中几个,然后在读取更多输入文件之前为它们生成输出(目标文件)。我想这是一个优化,可能是因为对磁盘的混合读/写访问比分配到(第一)读访问和(然后)写访问时更慢。

答案 2 :(得分:-2)

Visual Studio正在调用链接器LINK.exe,它主要使用目标文件作为输入,生成可执行文件作为输出,但也能够执行有关这些和相关文件的许多其他工作。 Linker Command-Line Syntax @ MSDN

答案 3 :(得分:-2)

模板实例(以及其他类型的代码)可能会生成代码(或者在某些情况下不会生成代码)。