在visual studio中进行编译时,编译器会根据自己的判断输出:
1>生成代码......
这到底在做什么?
答案 0 :(得分:13)
它正在做它所说的:它正在生成机器代码。许多编译器将C / C ++源代码转换为一些中间内部表示,稍后将其用作生成实际机器代码的源。 Visual C ++编译器(和许多其他编译器一样)在批处理中执行此操作:首先,它将一堆源文件转换为该中间表示,然后将它们全部转换为机器代码(然后开始处理下一批处理)。当您看到“生成代码”消息时会发生这种情况。
我不知道将源文件拆分成批次的确切逻辑。也许它只是按大小工作:一旦到目前为止生成的所有中间表示的总大小达到某种限制,它就会切换到“生成代码”模式。也许还有其他一些逻辑在那里工作。
在任何情况下都要注意,在这种情况下,不合格的术语“代码”不是指源代码,这意味着它与模板和/或预处理器或类似的东西无关。此外,参考具有不合格“代码”的C源(与合格的“源代码”相对)是一个非常小众的事情,更多的是在营销部门的家里而不是实际的程序员。在程序员级别,没有人将C源称为“代码”:)
答案 1 :(得分:3)
编译器同时给出多个输入文件,它一次读取(解析)其中几个,然后在读取更多输入文件之前为它们生成输出(目标文件)。我想这是一个优化,可能是因为对磁盘的混合读/写访问比分配到(第一)读访问和(然后)写访问时更慢。
答案 2 :(得分:-2)
Visual Studio正在调用链接器LINK.exe,它主要使用目标文件作为输入,生成可执行文件作为输出,但也能够执行有关这些和相关文件的许多其他工作。 Linker Command-Line Syntax @ MSDN
答案 3 :(得分:-2)
模板实例(以及其他类型的代码)可能会生成代码(或者在某些情况下不会生成代码)。