gcc入门教程.docx不经意间,,尽管在软件开发社区之外乏人闻问,在几乎所有开源软件和自由软件中都会用到,因此它的编译性能的涨落会直接影响到Linux、和Apache等几千个项目的开发。因此,摆在开源软件的核心地位是一点也不为过。另一方面,,正在牵引着广大程序员们的心。与程序员之间的关系,那无疑是"心随心动"。历史篇作为自由软件的旗舰项目,的时候,还只是把它当作仅仅一个C程序语言的编译器;piler而已。经过了这么多年的发展,GCC已经不仅仅能支持C语言;它现在还支持Ada语言、C++语言、Java语言、ObjectiveC语言、Pascal语言、COBOL语言,以及支持函数式编程和逻辑编程的Mercury语言,等等。也不再单只是GNUC语言编译器的意思了,pilerCollection也即是GNU编译器家族的意思了。另一方面,对于各种硬件平台的支持,概括起来就是一句话:无所不在。几乎所有有点实际用途的硬件平台,甚至包括有些不那么有实际用途的硬件平台。(piler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。Gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%~30%。官方网站:http://gcc./gcc是linux的唯一编译器,就没有linux,gcc的重要性就不可言喻啦。居然这么重要,那就很值得我们来好好研究下啦。好啦,之旅吧!和g++误区吧。gcc和g++都是GNU(组织)的一个编译器。误区一:gcc只能编译c代码,g++只能编译c++代码两者都可以,但是请注意:,gcc把它当作是C程序,而g++当作是c++程序;,两者都会认为是c++程序,注意,虽然c++是c的超集,但是两者对语法的要求是有区别的,例如:#include<>intmain(intargc,char*argv[]){if(argv==0)return;printString(argv);return;}intprintString(char*string){sprintf(string,"Thisisatest.\n");}如果按照C的语法规则,OK,没问题,但是,一旦把后缀改为cpp,立刻报三个错:“printString未定义”;“cannotconvert`char**'to`char*”;”return-statementwithnovalue“;分别对应前面红色标注的部分。可见C++的语法规则更加严谨一些。,g++,对于c++代码,两者是等价的,命令不能自动和C++程序使用的库联接,所以通常用g++来完成链接,为了统一起见,干脆编译/链接统统用g++了,这就给人一种错觉,好像cpp程序只能用g++似的。误区二:gcc不会定义__cplusplus宏,而g++会实际上,这个宏只是标志着编译器将会把代码按C还是C++语法来解释,如上所述,,编译器,则该宏就是未定义的,否则,就是已定义。误区三:,链接只能用g++严格来说,这句话不算错误,但是它混淆了概念,应该这样说:/g++,而链接可以用g++-lstdc++。命令不能自动和C++程序使用的库联接,所以通常使用g++来完成联接。但在编译阶段,g++,二者等价。误区四:extern"C"/g++有关系实际上并无关系,还是g++,用extern"c"时,都是以C的命名方式来为symbol命名,否则,都以c++方式命名。试验如下::extern"C"voidCppPrintf(void);:#include<iostream>#include""usingnamespacestd;voidCppPrintf(void){cout<<"Hello\n";}:#include<>#include<>#include""intmain(void){CppPrintf();return0;}"C",和g++命名有什么不同[******@rootG++]#g++-[******@rootG++]#//,***@function[root@]#gcc-[root@]#//,***@function完全相同!"C",和g++命名有什么不同[root@]#gcc-[root@]#lessm
gcc入门教程 来自淘豆网m.daumloan.com转载请标明出处.