Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ VC++';生成代码';,这是什么意思?_C++_Visual Studio_Visual C++ - Fatal编程技术网

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

C++ VC++';生成代码';,这是什么意思?,c++,visual-studio,visual-c++,C++,Visual Studio,Visual C++,在visual studio中编译时,编译器会根据自己的判断输出以下内容: 1> 正在生成代码 它到底在这里做什么?Visual Studio正在调用linker LINK.exe。它主要使用对象文件作为输入,以生成可执行文件作为输出,但也能够执行与这些文件和相关文件相关的许多其他工作 编译器一次获得多个输入文件,它一次读取(解析)多个输入文件,然后才为它们生成输出(对象文件),然后再读取更多的输入文件。我认为这是一种优化,大概是因为对磁盘的混合读/写访问要比将磁盘分为(先)读访问和(然后)写访

在visual studio中编译时,编译器会根据自己的判断输出以下内容:

1> 正在生成代码


它到底在这里做什么?

Visual Studio正在调用linker LINK.exe。它主要使用对象文件作为输入,以生成可执行文件作为输出,但也能够执行与这些文件和相关文件相关的许多其他工作

编译器一次获得多个输入文件,它一次读取(解析)多个输入文件,然后才为它们生成输出(对象文件),然后再读取更多的输入文件。我认为这是一种优化,大概是因为对磁盘的混合读/写访问要比将磁盘分为(先)读访问和(然后)写访问时慢

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

它正在做它所说的:它正在生成机器代码。许多编译器将C/C++源代码转换为某种中间内部表示形式,以后用作生成实际机器代码的源代码。VisualC++编译器(和许多其他编译器一样)批量进行:首先将一组源文件翻译成中间表示,然后将它们转换成机器代码(然后开始下一批工作)。这就是当您看到“生成代码”消息时发生的情况

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


在任何情况下,请注意,本例中的非限定术语“代码”并不指源代码,这意味着它与模板和/或预处理器或类似的内容无关。此外,使用不合格的“代码”(与合格的“源代码”相反)来引用C源代码是一件非常利基的事情,市场营销部门比实际的程序员更熟悉它。在程序员级别,没有人将C源代码仅仅称为“代码”:(我不这么认为,在这种情况下,meds指的是源代码的编译,而不是链接时间。虽然链接器也可以生成用于实例化模板的代码,这一点你是对的。是的,但是VC在这一阶段花时间,即使代码中没有模板。我想,谁否决了这一点,谁就知道得更清楚。想给我一些启发吗?很好的区别,我开始怀疑我一直在研究的这个新的解决方案为什么会产生这么多代码生成,我错误地假设了源代码生成。