GCC G++ C C++的区别
gcc 是c的编译器,g++是c++的编译器。cc一般是一个符号连接,指向gcc。
CC一般是makefile里面的一个名字,具体是什么根据实际情况决定。
gcc和g++都是GNU(组织)的一个编译器。
误区一:gcc只能编译c代码,g++只能编译c++代码
两者都可以,但是请注意:
1,后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序,注意,虽然c++是c的超集,但是两者对语法的要求是有区别的。C++的语法规则更加严谨一些。
2,编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和C++程序使用的库联接,所以通常用g++来完成链接,为了统一起见,干脆编译/链接统统用g++了,这就给人一种错觉,好像cpp程序只能用g++似的。
误区二:gcc不会定义__cplusplus宏,而g++会
实际上,这个宏只是标志着编译器将会把代码按C还是C++语法来解释,如上所述,如果后缀为.c,并且采用gcc编译器,则该宏就是未定义的,否则,就是已定义。
误区三:编译只能用gcc,链接只能用g++
严格来说,这句话不算错误,但是它混淆了概念,应该这样说:编译可以用gcc/g++,而链接可以用g++或者gcc -lstdc++。因为gcc命令不能自动和C++程序使用的库联接,所以通常使用g++来完成联接。但在编译阶段,g++会自动调用gcc,二者等价。
请问CC cc gcc g++本质区别在什么地方?
传统上, UNIX OS 会配带 C compiler by default. 一般用符号名 cc. 而C++ compiler 需要另外买.
常见的有:
Linux: gcc/g++
Solaris: cc/CC
HP-UX: aCC
AIX: xlc/xlC
SCO: ?/?
几乎所有的情况, C/C++ compiler 都只是front end driver. 后面的编译器是一样的. 比如gcc, g++ 提供不同的选项给编译器以及link editor. 这些包括用户选项, 缺省选项, 对应的缺省系统库. 每个compiler有一个configuratoin file来指定这些缺省选项. 使用 verbose mode (-v) 可以看到这些内容.
C++ 程序因为语法(namespace, class, overload...), 需要mangle 所有的symbol name. 与C程序link的时候需要用extern "C".
C++的编译器肯定可以编译C的的代码,注意除了C++对C的语法扩充之外,编译和链接C和C++的标准库通常也不一样呢。我用gcc而非g++也编译了C++的程序就证明了这一点。
GCC G++ C C++的区别相关推荐
- 不同的编译器:GCC G++ C C++的区别
gcc 是c的编译器,g++是c++的编译器.cc一般是一个符号连接,指向gcc.CC一般是makefile里面的一个名字,具体是什么根据实际情况决定. gcc和g++都是GNU(组织)的一个编译器. ...
- 【Linux】gcc/g++区别和联系
gcc/g++是什么 gcc/g++之间的区别和联系 gcc/g++是什么 讲到gcc/g++,那就得先说一下GCC,GCC:GNU Compiler Collection(GUN 编译器集合),它可 ...
- cc、gcc、g++、CC的区别概括
gcc是C编译器:g++是C++编译器:linux下cc一般是一个符号连接,指向gcc:gcc和g++都是GUN(组织)的编译器.而CC则一般是makefile里面的一个名字,即宏定义,嘿,因为Lin ...
- gcc g++ 支持c++11编译的标准和区别
g++ -g -Wall -std=c++11 main.cpp gcc -g -Wall -std=c11 main.cpp 如果不想每次写这个-std=C++11这个选项该怎么办呢? 方法出处:h ...
- Linux下gcc/g++、make和cmake的区别
文本程序到可执行文件生成无论在什么平台大致分为以下几个部分: 1.用编辑器编写源代码,如.c文件. 2.用编译器编译代码生成目标文件,如.o. 3.用链接器连接目标代码生成可执行文件,如.exe ...
- linux下g编译文件或目录,【转】在linux下使用gcc/g++编译多个.h文件
博主写得很好 多个文件编译在linux下编译,下面有三个文件,分别是1.cpp 和 2.cpp 和myhead.h 文件. 1.cpp 2.cpp myhead.h 假如他们都在一个目录下面,那么编译 ...
- Linux系统编程5:入门篇之在Linux下观察C/C++程序编译过程 gcc/g++使用详解
文章目录 (1)gcc/g++完成编译的过程 A:预处理 B:编译 C:汇编 D:链接 (2)gcc/g++选项 (3)重要概念:函数库 A:gcc/g++在哪实现了函数 B:静态库与动态库 (1)g ...
- 【linux系统编程】基础开发工具:gcc/g++
Linux C/C++ 编译器 – gcc/g++ 正文开始@Assassin 目录: Linux C/C++ 编译器 -- gcc/g++ 1. gcc/g++ 基本用法: 2. C/C++编译基本 ...
- 【Linux】三、Linux 环境基础及开发工具使用(上篇)|开发工具|编辑器-vim使用|sudo提升权限问题|编译器 - gcc/g++使用|项目自动化构建工构建工具-make/Makefile
目录 一.开发工具 二.Linux编辑器 - vim使用 2.1 vim 的基本概念 2.2 vim的基本操作 2.3 vim正常模式命令集 2.4 vim末行模式命令集 2.5 简单vim配置 2. ...
最新文章
- 渐进式web应用程序_渐进式Web应用程序简介
- 为UINavigationBar添加自定义背景
- Java中使用Jedis连接Redis对Key进行操作的常用命令
- java mvc 案例_springmvc经典案例
- java类加载器_java底层内功 第一章,类加载器的任性
- 一文入门Python 3
- ALEIYE 2.0发布 首创RET关键事件功能
- python基于pip和conda配置国内安装源,提升下载安装性能
- Oracle 常用脚本1
- 梯度下降优化算法综述
- excel怎么将英文小写转大写
- C# 使用 Response 导出 Excel 单元格格式设置为文本格式
- polkitd进程解释
- Spark History Server 没有生效
- 切片软件 cura linux,Ubuntu系统入门教程-3D打印切片软件cura
- [UE4]射击产生弹孔:Spawn Decal At Location、Spawn Decal Attached
- Python从入门到实践第9章课后作业
- AI笔记: 数学基础之正交矩阵与矩阵的QR分解
- Failed to resolve org.junit.vintage:junit-vintage-engine:5.6.2
- 【BlackDuck】Black-Duck-User-Guide用户指导书