时间:2017年4月4日~9日 天气:阴:cloud:
Author:冬之晓:angry:
Email: 347916416@qq.com
回家之后,腾飞家要搬家,于是我天天帮他搬家,到了6号晚上,腾飞给我打电话,说明天成绩就要出来了,我当时并没有给出太多反应,
但是晚上还是有点难以入睡,最后等到了12点,打开网页,结果分数没有出来,这时腾飞给我打电话,说他考的很高。听了以后感觉很欣慰,
我估计自己可能考不了这么高,第二天中午,在腾飞家帮他搬家的时候我查到了我的成绩,发现果然很低,虽然每一门都过线了,哎。
看来是不行了,这样还是赶快去北京吧,虽然同学说让我等到交大分数出来在做打算,可是我现在已经在家待不下去了,希望赶快找工作,
博士没考上,还没有工作,感觉自己太颓废太难受了,因此7号帮腾飞搬完家,我就决定去北京,腾飞的分数很高,估计能上学,
他急着去北京准备复试,我们就一起买了9号晚上的票,去往北京。姥姥听说我要走,很难过,当天下着大雨,是否也代表着我悲伤的心情?
C/C++编译程序时候的一些注意点
关于程序的编译和链接
在此,我想多说关于程序编译的一些规范和方法,一般来说,无论是C、C++,首先要把源文件编译成中间代码文件,在Windows下也就是.obj 文件,UNIX 下是.o 文件,即Object File,这个动作叫做编译(compile)。然后再把大量的Object File 合成执行文件,这 个动作叫作链接(link)。
编译时,编译器需要的是语法的正确,函数与变量的声明的正确。对于后者,通常是你需要告诉编译器头文件的所在位置(头文件中应该只是声明,而定义应该放在C/C++文件中),只要所有的语法正确,编译器就可以编译出中间目标文件。一般来说,每个源文件都应该对应于一个中间目标文件(O 文件或是OBJ 文件)。链接时,主要是链接函数和全局变量,所以,我们可以使用这些中间目标文件(O 文件或是OBJ 文件)来链接我们的应用程序。链接器并不管函数所在的源文件,只管函数的中间目标文件(Object File),在大多数时候,由于源文件太多,编译生成的中间目标文件太多,而在链接时需要明显地指出中间目标文件名,这对于编译很不方便,所以,我们要给中间目标文件打个包,在Windows 下这种包叫“库文件”(Library File),也就是.lib 文件,在UNIX 下,是Archive File,也就是.a 文件。
总结一下,源文件首先会生成中间目标文件,再由中间目标文件生成 执行文件。在编译时,编译器只检测程序语法,和函数、变量是否被 声明。如果函数未被声明,编译器会给出一个警告,但可以生成Object File。而在链接程序时,链接器会在所有的Object File 中找寻函数的 实现,如果找不到,那到就会报链接错误码(Linker Error),在VC 下,这种错误一般是:Link 2001 错误,意思说是说,链接器未能找 到函数的实现。你需要指定函数的Object File.
关于C/C++的区别
- 文件后缀不一样,头文件都是.h,但是C++的源文件后缀是.cpp,而C的源文件的后缀是.c
- C++函数具有重载机制
- C++包含类(包含编译时需要增加虚表等…),可以使用模板
关于C/C++联合编译
了解了程序编译连接的过程,就不难进行联合编译了。lo
在c++中,为了支持重载机制,在编译生成的汇编码中,要对函数的名字进行一些处理,加入比如函数的返回类型等等。而在C中,只是简单的函数名字而已,不会加入其他的信息。也就是说:C++和C对产生的函数名字的处理是不一样的。
在编译test.cxx的时候编译器是使用C++的方式来处理f1()函数的,但是实际上链接的库文件却是用C的方式来处理函数的,所以就会出现链接过不去的错误:因为链接器找不到函数。 因此,为了在C++代码中调用用C写成的库文件,就需要用extern “C”来告诉编译器:这是一个用C写成的库文件,请用C的方式来链接它们。