2 hchchc6016 hchchc6016 于 2016.04.04 18:46 提问

c++在编译期间都做了些什么

图片说明看了这张ppt之后,很好奇编译期间都做了哪些工作
1.是不是不同的编译器不一样的?如果不一样就讲讲主流的像vs这样的吧(zl一直用vs,不知道大神有更好的推荐吗)
2.const 在编译期间就被赋值了,有没有其他变量也是在编译期间赋值?全局变量?静态变量?宏?
3.主要还是讲讲编译的时候几个步骤吧
请大神讲的详细一点!不胜感激!

2个回答

caozhy
caozhy   Ds   Rxr 2016.04.04 23:15
已采纳

找一个idapro,反编译生成的exe,可以很直观地看到编译器做了什么。你的ppt上说的那些只是语言规范,和编译器怎么实现的不是一回事。

模板编译过程
http://blog.csdn.net/look01/article/details/3228134

oyljerry
oyljerry   Ds   Rxr 2016.04.04 21:24

模版是编译器展开 运行时变量是运行才知道

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
main函数执行之前都干啥了----C/C++运行时库剖析
本文介绍运行时库实现的功能,你会看到在main函数执行之前都做了什么操作!
编译过程做了哪些事情;
1.编译过程做了哪些事情; 2.字典大致实现原理; 3.block和函数指针的理解; 4.一般开始做一个项目,你的架构是如何思考的? 5.你了解的UIKit结构? 1.编译过程做了哪些事情?1.C++,Objective C都是编译语言。编译语言在执行的时候,必须先通过编译器生成机器码,机器码可以直接在CPU上执行,所以执行效率较高。iOS开发目前的常用语言是:Objective和Swift。二者
js里面的new到底干了些什么
var Person = function(name){ this.name = name; }; //模仿new var p = {}; p.__proto__ = Person.prototype; Person.call(p); __proto__只有火狐有,其它的浏览器是不开放的,像IE,__proto__这个名字就是一个不公开的prototype functi
C编译时各个阶段都在做什么
C语言编译主要分为四个阶段 1.预处理    此阶段主要完成#符号后面的各项内容到源文件的替换,往往一些莫名其妙的错误都是出现在头文件中的,要在工程中注意积累一些错误知识。    (1)、#ifdef等内容,完成条件编译内容的替换    (2)、#include中内容,在当前目录或者指定目录,或者默认目录搜索头文件,并将头文件拷贝到源文件中。    (3)、#define的内容,替换de
SystemManager在预加载期间都做了些什么
Flex程序是两帧的MovieClip。主程序(Application)以及RSL、资源文件等都放置在第二帧。 由于FlashPlayer的逐帧执行特性,如果播放头在第一帧上,则第一帧上的代码无法使用到第二帧的内容。   SystemManager先将播放头停在第一帧上,等待主程序(Application)以及RSL、资源文件全部下载完毕。 然后将播放头移入到第二帧,这样就可以使用第二帧的
Tomcat 启动都做了什么?
这里我们在windows 机子作为实验,来看看tomcat 启动的时候都做了什么。startup.bat这个文件java ee 程序员最熟悉不过了,是一个启动tomcat 服务器的批处理文件,这个文件真正意义上不是启动tomcat 的,而是判断Tomcat 的一个批处理文件是否存在,如果存在的话就会调用这个批处理。而这个批处理是和startup.bat 同目录,这个文件叫做catalina.bat
编译(Compile)、连接(Link)都做了什么事情
一个C程序的生成要经历以下步骤:  1.编写文本代码,生成C或Cpp文件,这时候它还是文本的;  2.编译,就是Compile,由C编译程序对你写的代码进行词法和句法分析,发现并报告错误,有错时编译不能通过。如若无错,则生成中间代码,扩展名为obj,此时它便是二进制的了;  3.连接,在汇编里称Link,在C里叫生成,即Build,它的作用是生成可执行的exe文件。由于一个程序的
ARC到底帮我们做了哪些工作?
从iOS5开始, 就支持自动引用计数(Automatic Reference Counting, ARC)了, 所以就变得更为简单了。ARC几乎把所有内存管理事宜都交由编译器来决定, 开发者只需专注于业务逻辑。
Laravel 4 入门三讲(上)laravel 在启动的时候到底做了什么?
在 Laravel 4 的官方文档里介绍了如何快速的使用它来开始程序的开发。然而相对于如何快速的输出“Hello Word!”笔者更关心的,是在执行到“Hello Word!”这句代码之前程序都做了哪些事情,只有在理解了这个问题之后我们才能够更加深入的去完成开发,才能在出现问题的时候有的放矢,“能用 Laravel 开发”跟“会用 Laravel 开发”毕竟是两码事。   下面安照执行顺序列
jvm性能调优都做了什么
JVM性能调优有很多设置,这个参考JVM参数即可. 主要调优的目的: 控制GC的行为.GC是一个后台处理,但是它也是会消耗系统性能的,因此经常会根据系统运行的程序的特性来更改GC行为 控制JVM堆栈大小.一般来说,JVM在内存分配上不需要你修改,(举例)但是当你的程序新生代对象在某个时间段产生的比较多的时候,就需要控制新生代的堆大小.同时,还要需要控制总的JVM大小避