当前位置: 首页 > news >正文

如何编译和运行C++程序?

C++ 和C语言类似,也要经过编译和链接后才能运行。在《C语言编译器》专题中我们讲到了 VS、Dev C++、VC 6.0、Code::Blocks、C-Free、GCC、Xcode 等常见 IDE 或编译器,它们除了可以运行C语言程序,还可以运行 C++ 程序,步骤是一样的,这里不再赘述,读者需要留意的是 C++ 源文件的后缀,以及 GCC 中的g++命令。

下图是 C/C++ 代码生成可执行文件的过程:

C++源文件的后缀

C语言源文件的后缀非常统一,在不同的编译器下都是.c。C++ 源文件的后缀则有些混乱,不同的编译器支持不同的后缀,下表是一个简单的汇总:

编译器

Microsoft Visual C++

GCC(GNU C++)

Borland C++

UNIX

后缀

cpp、cxx、cc

cpp、cxx、cc、c++、C

cpp

C、cc、cxx

UNIX 是昂贵的商业操作系统,初学者几乎用不到;Microsoft Visual C++ 是微软的 C/C++ 编译器,VC 6.0、VS 都使用该编译器。我推荐使用.cpp作为 C++ 源文件的后缀,这样更加通用和规范。

g++ 命令

有了C语言开发经验,在 VS、Dev C++、VC6.0、C-Free、Xcode 等常见 IDE 下编译 C++ 程序易如反掌,只要把源文件的后缀设置为.cpp即可,相信各位读者都能够毫无障碍地驾驭。本节我们重点介绍 Linux GCC 的使用。

在C语言中,我们使用gcc命令来编译和链接C程序。例如编译单个源文件:

gcc main.c

编译多个源文件:

gcc main.c module.c

编译C++程序时,gcc命令也可以使用,不过要增加-lstdc++选项,否则会发生链接错误。例如编译单个源文件:

gcc main.cpp -lstdc++

编译多个源文件:

gcc main.cpp module.cpp -lstdc++

gcc命令在链接时默认使用C的库,只有添加了-lstdc++选项才会使用 C++ 的库。

不过 GCC 中还有一个g++命令,它专门用来编译 C++ 程序,广大 C++ 开发人员也都使用这个命令。g++命令和gcc命令的用法如出一辙,例如编译单个源文件:

g++ main.cpp

编译多个源文件:

g++ main.cpp module.cpp

使用-o选项可以指定可执行文件的名称:

g++ main.cpp -o demo

./demo

要想理解g++命令,我们得从 GCC 的历史谈起。GCC 是由 GUN 组织开发的,最初只支持C语言,是一个单纯的C语言编译器,后来 GNU 组织倾注了更多的精力,使得 GCC 越发强大,增加了对 C++、Objective-C、Fortran、Java 等其他语言的支持,此时的 GCC 就成了一个编译器套件(套装),是所有编译器的总称。

在这个过程中,gcc命令也做了相应地调整,它不再仅仅支持C语言,而是默认支持C语言,增加参数后也可以支持其他的语言。也就是说,gcc是一个通用命令,它会根据不同的参数调用不同的编译器或链接器。

但是让用户指定参数是一种不明智的行为,不但增加了学习成本,还使得操作更加复杂,所以后来 GCC 又针对不同的语言推出了不同的命令,例如g++命令用来编译 C++,gcj命令用来编译 Java,gccgo命令用来编译Go语言。

在以后使用 Linux GCC 时,我推荐使用g++命令来编译 C++ 程序,这样更加简洁和规范。

http://www.lryc.cn/news/7027.html

相关文章:

  • Golang 给视频添加背景音乐 | Golang工具
  • 让AI护理医疗:解决卫生系统的痛点
  • Windows 离线安装 MySQL 8
  • 【前端攻城狮之vue基础】02路由+嵌套路由+路由query/params传参+路由props配置+replace属性+编程式路由导航+缓存路由组件
  • CHAPTER 1 Zabbix介绍及安装
  • 认识V模型、W模型、H模型
  • excel ttest检测
  • PDFPrinting.Net操作进行细粒度控制
  • SegPGD
  • ESP-IDF + Vscode ESP32 开发环境搭建以及开发入门
  • SpringMvc的请求和响应
  • 【Vue3】首页主体-面板组件封装
  • 部署 K8s 集群
  • 关于北京君正:带ANC的2K网络摄像头用户案例
  • ccc-Backpropagation-李宏毅(7)
  • 找出字符串中第一个匹配项的下标-力扣28-java
  • SpringBoot 监听Redis key过期回调
  • 蓝桥杯C/C++VIP试题每日一练之回形取数
  • 四控、三管、一协调
  • jdk19下载与安装教程(win10)超详细
  • 来来来,手摸手写一个hook
  • 【C++】AVL树
  • Mybatis源码(2) - SqlSessionTemplate的介绍及创建过程
  • 女生做大数据有发展前景吗?
  • Git实用指令记录
  • 复杂美公链技术重要特色:平行公链架构
  • Java——进制转换的一些内容
  • 使用 Nodejs、Express、Postgres、Docker 在 JavaScript 中构建 CRUD Rest API
  • 电子招标采购系统源码之什么是电子招投标系统?
  • 匹配文件名称模块glob和fnmatch