C++程序的编译与运行

news2024/11/26 17:46:50

C++和C语言类似,也要经过编译和链接后才能运行。
下图是 C/C++ 代码生成可执行文件的过程:
 

C++源文件的后缀

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

编译器Microsoft Visual C++GCC(GNU C++)Borland C++UNIX
后缀cpp、cxx、cccpp、cxx、cc、c++、CcppC、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.coloradmin.cn/o/153749.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新应用——设备巡检管理,系统化更具稳定性

对于生产制造型企业来说,随着企业逐步发展,产量增大,生产设备的稳定性和安全性就成为企业经济效益的关键。设备巡检是有效保证设备安全和稳定的重要环节。通过设备巡检,定期掌握各台设备的运行情况及周围环境的变化,尽…

算法竞赛百日——快速排序 - 分治

本文已收录于专栏 🌲《百日算法竞赛》🌲 目录 本文已收录于专栏 🌲《百日算法竞赛》🌲 快速排序 解题思路 ​ 思路分析: 模拟: AC_Code 二分查找 用二分法求 平方根 二分模板 快速排序 给定你…

纯前端导出Excel并修改样式

之前写过一篇前端导出:Vue实现导出功能(无后端配合) ,但是当时没考虑到样式的问题,后来要求导出的Excel单元格的样式也需要调整,尤其是宽度,第一想到的就是xlsx-style这个包,之前也没…

Python基础篇---生成器和模块

生成器对象 生成器对象其本质是自定义迭代器,就是需要我们自己写代码产生的迭代器。 生成器对象也是节省存储空间的 特性与迭代器对象一致。 def index():print(第一次输出)yield 1print(第二次输出)yield 2 1 2 3 4 5 6 7 8 9 10 当我们没有加括号调用之前&…

学习JavaScript,有哪些好的博客或者网站推荐?

前言 特意制作了一个Js整体的学习路线以及相关知识点博客讲解以及各类网站学习的资源整合,希望对你有帮助哈~ 废话少说,我们直接进入正题,先放上路线导图: 部分重要知识点 基础性知识 声明变量 null 和 undefined 详解JavaS…

code warrior IDE win10 64位安装保姆级教程

以下安装步骤是在win10 64位系统运行程序默认安装在C盘第1步:第2步:将PE_Plugin.dll文件复制到com文件夹中,路径如下:C:\Program Files(x86)\Freescale\CodeWarrior for Microcontrollers V6.3\bin\plugins\com第3步:以…

Blender里的三种绑定 (三)骨骼

文章目录Blender里的三种绑定.骨骼.骨骼基础.骨骼的父子关系.挤出骨骼.细分骨骼.骨骼分层.骨骼分组.骨骼约束.骨骼被遮挡.对称骨骼.为模型绑定骨骼.刚体物体,只跟随骨骼的移动,不随骨骼移动发生形变,如机械.软体物体,跟随骨骼的移…

手写RPC框架第7版-框架容错性相关设计

源代码地址:https://github.com/lhj502819/IRpc/tree/v8 系列文章: 注册中心模块实现路由模块实现序列化模块实现过滤器模块实现自定义SPI机制增加框架的扩展性的设计与实现基于线程和队列提升框架并发处理能力框架容错性相关设计通过SpringBoot-Starte…

数据结构:关于空间复杂度的例题计算

1、计算冒泡排序的空间复杂度 答案:该程序空间复杂度为O(1)。 解析:该程序在栈空间所申请的临时变量空间只有三个,也就是看成常数个,所以是O(1)。如下图所示 2、动态开辟N个数的数组空间复杂度 答案:该程序空间复杂度…

【UE4 第一人称射击游戏】31-更好的UI界面

素材资料地址:链接:https://pan.baidu.com/s/1epyD62jpOZg-o4NjWEjiyg密码:jlhr上一篇:【UE4 第一人称射击游戏】30-简单的任务提示功能本篇效果:步骤:在UE中新建一个“HUD_Export”文件夹,将所…

《码出高效:java开发手册》七 - 并发与多线程

前言 现代CPU运算速度以百亿计,家用计算机和操作系统也是数十进程,数百线程,程序相应也需要采用多线程和并发的技术 并发和并行:并发是指某个时间段,多任务处理;并行是指同时处理多任务的能力;…

接口测试项目实战与经典面试题解析,挑战 BAT 大厂必会!

近年来,接口测试技术体系已在各大互联网企业落地普及,各种新接口框架不断涌现,业界也形成了不少成熟方案和成功案例。当前 BAT 大厂在招聘测试人员时,接口测试技能和项目经验是必考重点,直接影响到职级评定和薪资水平&…

2023/1/10 Vue学习笔记6 - 路由基本使用

1 路由的简介-router 1、路由就是一组key-value的对应关系。 2、多个路由,需要经过路由器的管理。 SPA (single page web application)应用 - 单页面web应用 {"key":"/class","value":"班级组件" }1.vue-rout…

kali中wpscan工具使用

一.wpscan工具简介 wpscan是一款专门针对wordpress的扫描工具,采用ruby语言编写,能够扫描worpress网站中包括主题漏洞、插件漏洞以及wordpress网站本身存在的漏洞。wpscan还可以扫描wordpress网站启用的插件和其他功能。 在Kali Linux系统中&#xff0…

关于distinct——去除重复记录

distinct译为:不同的,有区别的;在SQL语句中表示去除重复记录的意思 举例:在员工表emp中查询所有的工作岗位。 分析:在员工表中的工作岗位字段下有重复的工作岗位,我们在查询的时候就希望将重复的工作岗位显…

数据库取证——MySQL基础知识

目录 一、数据库基础知识 (一)数据库(DB) (二)数据库管理系统(DBMS) (三)数据库系统(DBS) (四) 数据库的…

【Unity云消散】简单理论基础:实现边缘光

写在前面 既然想要实现云的消散效果,那么边缘光如何计算也是一个重点。 在Unity Shader入门精要的14章,介绍轮廓线渲染就介绍了——轮廓边检测,而边缘光也是需要先检测出轮廓边再进行的。 Unity3D Shader系列之边缘光RimLight 这篇博客给…

Go专家编程读书小记

文章目录协程进程和线程进程:进程间通信:线程:区别:协程GMP模型调度策略内存管理内存分配span:cache:central:heap:垃圾回收常见的垃圾回收算法:三色标记:垃圾…

【NI Multisim 14.0原理图设计基础——查找元器件】

目录 序言 一、查找元器件 🍍1.浏览元器件 🍍2.搜索元器件 🍍 3.显示找到的元器件及其所属元器件库 🍍 4.加载找到元器件的所属元器件库 序言 NI Multisim最突出的特点之一就是用户界面友好。它可以使电路设计者方便、快捷地…

大资金现金管理的利器:稳定币网格做市策略

数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学,点击下方链接报名: 量化投资速成营(入门课程) Python股票量化投资 Python期货量化投资 Python数字货币量化投资 C语言CTP期货交易系统开…