一、gcc与g++的区别
gcc与g++都是GNU的一个编译器。
1.1 误区一
gcc只能编译c代码,g++只能编译C++代码,其实两者都可以,因为仅仅针对的是编译阶段。
在编译阶段,g++会调用gcc,对于C++代码,两者是等价的,但是因为gcc命令不能自动和C++程
序使用的库链接,所以使用g++来完成链接,为了统一起见,干脆编译/链接统一用g++了。因此给
人的错觉就是cpp程序只能用g++一样。
为了证明上述说的正确性,我们进行实验,如下图1-1所示: 注意,这里要用到下面第二章的
内容gcc常用参数选项,-c表示的是只是编译、汇编成机器代码,而不进行链接,如果使用的是-o
百分百是报错的,如下图1-2所示,那如果非想用gcc编译并链接成可执行文件呢?那你真是死脑筋
哈哈哈哈,直接用g++不好吗,花里胡哨的!!!其实也可以用gcc编译并链接成可执行文件,使
用参数-lstdc++即可,如下图1-3所示:
图 1-1 gcc编译
图1-2 gcc链接错误
图1-3 gcc链接成功
1.2 误区二
gcc不会定义_cplusplus宏,而g++会,这个是误区的。
实际上,这个宏只是标志着编译器会把代码按C还是C++语法来解释,如果后缀为.c文件的开
并且采用gcc编译器,则该宏就是未定义的,否则就是已经定义的。
1.3 误区三
编译只能用gcc,链接只能用g++,这个是混淆了,不能说是错误。编译可以用g++/gcc,而链
接可以用g++或者是gcc -lstdc++。
gcc命令不能自动和c++程序使用的库链接,所用通常使用g++,但是在编译阶段,g++会自动调
用gcc,二者等价的。
二、gcc常用参数选项
前面4个参数就不说了,着重讲一下-D参数,在程序编译的时候指定一个宏!!!指定宏就
是让我们在调试的时候较好的定位到自己想知道的位置,输出的结果可以在日志里面查看!
下面我在vim编辑器里面写一个测试案例,形象说一下这个宏的作用。
上述是我写了一个宏,如果定义了这个宏的话,就会输出里面的语句,意思就是如果你想知
道那个语句的信息,可以自己定义宏,然后会输出相关信息的。
如下所示:若不加-D参数的话,不会打印这个printf语句的。
但是如果加上-D并且后面跟上相应的宏,输出如下: