栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

GCC/gcc/g++那些事儿

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

GCC/gcc/g++那些事儿

GCC/gcc/g++那些事儿
    • 1. 什么是GCC/gcc/g++
    • 2. gcc和g++的相关误区和比较
    • 3. 一个简单的示例

1. 什么是GCC/gcc/g++
  • GCC是GNU Compiler Collect(GNU编译器集合),它可以编译C、C++、Fortan等语言
  • gcc是GCC中的GNU C Compiler(C编译器)
  • g++是GCC中的GNU C++ Compiler(C++编译器)
2. gcc和g++的相关误区和比较

误区一:gcc只能编译c文件,g++只能编译cpp文件

从本质上来说,gcc和g++并不是编译器,而是负责调用真正的编译器(compiler)的一个驱动程序(driver)。在GCC中,负责编译C代码的程序叫做cc1,负责编译C++代码的叫做cc1plus。gcc/g++会根据源代码文件后缀名调用合适的编译器,并设置相关编译参数。对于.c文件和.cpp文件,分别使用gcc和g++进行编译,实际调用的编译器关系如下表所示:

使用gcc编译使用g++编译
.c文件C语言,调用cc1进行编译C++语言,调用cc1plus编译
.cpp文件C++语言,调用cc1plus编译C++语言,调用cc1plus编译

通过查询gcc和g++的man page也可以发现,对这二者的描述均为GNU projects C and C++ Compiler。运行man gcc和man g++结果均为下图所示。

gcc和g++的比较

  1. 使用g++编译时,会自动链接标准库STL,而使用gcc编译则不会
  2. gcc在编译C文件时,可用的预定义宏是比较少的
  3. gcc在编译C++文件,或者g++在C/CPP文件时,会加入一些额外的预定宏,比较常见有__cplusplus宏
3. 一个简单的示例

定义两个头文件utils.h和display.h,内容如下:

// utils.h
#ifndef _UTILS_H_
#define _UTILS_H_

int add(int num1, int num2);
int sub(int num1, int num2);

#endif
// display.h
#ifndef _DISPLAY_H_
#define _DISPLAY_H_

void show(char * msg);

#endif

再定义如下的main.c文件:

// main.c
#include "utils.h"
#ifdef __cplusplus
#include "display.h"
#endif

int main()
{
	return 0;
}

使用gcc对上述main.c文件进行预处理

运行如下命令,得到main.i文件

gcc -E main.c -o main.i

查看main.i文件:


由此可见,gcc在处理C文件时,将其视为C语言文件进行编译,调用cc1编译器,没有__cplusplus宏。因此,在预处理过程中,没有将dispaly.h头文件包含进来。

使用g++对上述main.c文件进行预处理

运行如下命令,得到main.i文件

g++ -E main.c -o main.i

查看main.i文件:

由此可见,g++在处理C文件时,将其视为C++语言文件进行编译,调用cc1plus编译器,包含__cplusplus宏。因此,在预处理过程中,会将dispaly.h头文件包含进来。

将main.c文件改为main.cpp,并使用gcc对main.cpp文件进行预处理

运行如下命令,得到main.i文件

gcc -E main.cpp -o main.i

查看main.i文件:

由此可见,gcc在处理CPP文件时,将其视为C++语言文件进行编译,并调用cc1plus编译器,包含__cplusplus宏。因此,在预处理过程中,会将dispaly.h头文件包含进来。

将main.c文件改为main.cpp,并使用g++对main.cpp文件进行预处理

结果同使用gcc编译main.cpp文件

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/968580.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号