【程序创建的技巧】

文章目录

  • 导语
  • 名词
    • 源代码
    • 目标代码(object code)
    • 可执行代码
  • 创建源代码文件
  • 编译和链接
    • UNIX编译和链接
    • Linux编译和链接
    • Windows命令行编译器
    • Windows编译器
  • 总结

导语

假设您编写了一个 C++ 程序。 如何让它运行起来呢? 具体的步骤取决于计算机环境和使用的 C++ 编译器。大体如下:

描述

名词

源代码

使用文本编辑器编写程序, 并将其保存到文件中, 这个文件就是程序的源代码。

目标代码(object code)

编译源代码。 这意味着运行一个程序, 将源代码翻译为主机使用的内部语言——机器语言。 包含了翻译后的程序的文件就是程序的目标代码(object code)。

可执行代码

将目标代码与其他代码链接起来。

链接指的是将目标代码同使用的函数的目标代码以及一些标准的启动代码(startupcode) 组合起来, 生成程序的运行阶段版本。 包含该最终产品的文件被
称为可执行代码。

创建源代码文件

有些 C++ 实现提供了集成开发环境(integrated development environments, IDE)让您能够在主程序中管理程序开发的所有步骤,包括编辑。

有些实现只能处理编译和链接阶段, 要求在系统命令行输入命令。

给源文件命名时, 必须使用正确的后缀, 将文件标识为 C++ 文件。后缀由一个句点和一个或多个字符组成, 这些字符被称作扩展名。

描述

使用什么扩展名取决于 C++ 实现,一些常用的扩展名:

C++实现源代码文件的扩展名
UNIXC、 cc、 cxx、 c
GNU C++C、 cc、 cxx、 cpp、 c++
Microsoft Visual C++cpp、 cxx、 cc

编译和链接

Stroustrup 实现 C++ 时, 使用了一个 C++ 到 C 的编译器程序,而不是开发直接的 C++ 到目标代码的编译器。 前者叫做 cfront(表示 C 前端, C front end) , 它将 C++ 源代码翻译成 C 源代码, 然后使用一个标准 C 编译器对其进行编译。

随着 C++ 的日渐普及,越来越多的实现转向创建 C++ 编译器, 直接将 C++ 源代码生成目标代码。 这种直接方法加速了编译过程, 并强调 C++ 是一种独立(虽然有些相似) 的语言。

UNIX编译和链接

UNIX命令CC调用 cfront。要编译 C++ 源代码文件 spiffy.C, 则应在 UNIX 提示符下输入如下命令:

CC spiffy.C

程序没有错误, 编译器将生成一个扩展名为 o 的目标代码文件。 在这个例子中, 编译器将生成文件 spiffy.o

接下来, 编译器自动将目标代码文件传递给系统链接程序, 该程序将代码与库代码结合起来, 生成一个可执行文件。 在默认情况下, 可执行文件为 a.out 。

要运行该程序, 只要输入可执行文件的文件名即可:

a.out

程序也可以包含多个文件,可以通过在命令行上列出全部文件来编译程序:

CC my.C precious.C

如果有多个源代码文件, 则编译器将不会删除目标代码文件。 这样, 如果只修改了 my.C 文件, 则可以用下面的命令重新编译该程序:

CC my.C precious.o

这将重新编译 my.C 文件, 并将它与前面编译的 precious.o 文件链接起来。

可能需要显式地指定一些库。 例如, 要访问数学库中定义的函数,必须在命令行中加上 -lm 标记:

CC usingmath.C -lm

Linux编译和链接

Linux系统中最常用的编译器是 g++。g++ 编译器的工作方式很像标准 UNIX 编译器。

下面的命令将生成可执行文件 a.out。

g++ spiffy.cxx

有些版本可能要求链接 C++ 库:

g++ spiffy.cxx -lg++

要编译多个源文件, 只需将它们全部放到命令行中即可:

g++ my.cxx precious.cxx

这将生成一个名为 a.out 的可执行文件和两个目标代码文件 my.o 和 precious.o。 如果接下来修改了其中的某个源代码文件,如 my.cxx, 则可以使用 my.cxx 和 precious.o 来重新编译:

g++ my.cxx precious.o

Windows命令行编译器

要在 Windows PC上编译 C++ 程序,需要下载一个在 Windows 命令提示符模式下运行的免费命令行编译器。 Cygwi n和 MinGW 都包含编译器 GNU C++, 且可免费下载; 它们使用的编译器名为 g++。

要编译名为 great.cpp 的源代码文件, 请在提示符下输入如下命令:

g++ great.cpp

如果程序编译成功, 则得到的可执行文件名为 a.exe。

//great.cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a , b;
	cin >> a >> b;
	cout << a + b;
	return 0;
}

在这里插入图片描述

Windows编译器

当前,最流行是 Microsoft Visual C++ 2010。

通常, 必须为程序创建一个项目, 并将组成程序的一个或多个文件添加到该项目中。

创建好项目后, 需要对程序进行编译和链接。

需要注意的是, 程序能够通过某个编译器的编译并不意味着它是合法的 C++ 程序; 同样, 程序不能通过某个编译器的编译也并不意味着它是非法的 C++ 程序。

程序执行完毕后, 有些 IDE 将关闭该窗口, 而有些IDE不关闭。 如果编译器关闭窗口, 将难以看到程序输出,为查看输出, 必须在程序的最后加上一些代码:

cin.get();
cin.get();

cin.get( ) 语句读取下一次键击, 因此上述语句让程序等待, 直到按下了 Enter 键(在按下 Enter 键之前, 键击将不被发送给程序, 因此按其他键都不管用) 。

如果程序在其常规输入后留下一个没有被处理的键击, 则第二条语句是必需的。 例如, 如果要输入一个数字, 则需要输入该数字, 然后按 Enter 键。 程序将读取该数字, 但 Enter 键不被处理, 这样它将被第一个 cin.get( ) 读取。

总结

C 语言新增了诸如控制结构和函数等特性, 以便更好地控制程序流程, 支持结构化和模块化程度更高的方法; 而 C++ 增加了对面向对象编程和泛型编程的支持, 这有助于提高模块化和创建可重用代码, 从而节省编程时间并提高程序的可靠性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/570716.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CountDownLatch源码分析

1.创建 CountDownLatch latch new CountDownLatch(5); 2.latch.countDown(); 将count执行减一操作&#xff0c;当count为0时&#xff0c;等待中的线程会被唤醒 SIGNAL (值为-1)&#xff1a; 表示后继节点需要被唤醒。当一个节点释放锁的时候&#xff0c;会唤醒它的后继节点…

javaScript中的this 指向

this 指向总结 this 关键字是一个非常重要的语法点。 this 可以用在构造函数之中&#xff0c;表示实例对象。除此之外&#xff0c;this 还可以用在别的场合。但不管是什么场合&#xff0c;this 都有一个共同点&#xff1a;它总是返回一个对象。 关于 this 的指向&#xff0c…

基于Kepware的Hadoop大数据应用构建-提升数据价值利用效能

背景 Hadoop是一个由Apache基金会所开发的分布式系统基础架构&#xff0c;它允许用户在不需要深入了解分布式底层细节的情况下&#xff0c;开发分布式程序。Hadoop充分利用集群的威力进行高速运算和存储&#xff0c;特别适用于处理超大数据集。 Hadoop的生态系统非常丰富&…

如何利用美国站群服务器通过CN2线路优化中美之间的数据传输?

如何利用美国站群服务器通过CN2线路优化中美之间的数据传输? 随着全球化进程的不断推进&#xff0c;跨国企业和国际市场的拓展对数据传输速度和稳定性提出了更高的要求。特别是对于中美之间的数据传输&#xff0c;由于地理位置遥远和网络环境不同&#xff0c;优化数据传输变得…

风格迁移adaIN 和iT的adaLN

文章目录 BN、LN、IN、GN的区别![](https://img-blog.csdnimg.cn/direct/d38c005616f145cba2aa1c4c2e046be0.png)图像风格迁移adaINDiT adaLN BN、LN、IN、GN的区别 BatchNorm&#xff1a;batch方向做归一化&#xff0c;算NxHxW的均值&#xff0c;对小batchsize效果不好&#x…

二次封装el-carousel

我们创建了一个名为MyCarousel的组件&#xff0c;它接受el-carousel的一些常用属性作为props&#xff0c;并默认提供了一些值。我们还通过setup函数返回了所有props&#xff0c;以便它们可以在模板中被使用。 1.MyCarousel.vue组件 <!-- 轮播图片 --> <template>…

08 IO-字符流其它流

IO-字符流&其它流 **字节流&#xff1a;**适合复制文件等&#xff0c;不适合读写文本文件 **字符流&#xff1a;**适合读写文本文件内容 IO流体系 字符流 FileReader&#xff08;文件字符输入流&#xff09; 作用&#xff1a;以内存为基准&#xff0c;可以把文件中的数…

盛水最多的容器 ---- 双指针

题目链接 题目: 分析: 最大容积 即使就是最大面积, 长为下标之差, 宽为两下标对应值的最小值解法一: 暴力枚举: 将每两个数之间的面积都求出来, 找最大值, 时间复杂度较高解法二: 假设我们的数组是[6, 2, 5, 4], 我们先假设最左边和最右边, 即6 和 4 之间是最大面积长a*宽b此…

Android --- 常见UI组件

TextView 文本视图 设置字体大小&#xff1a;android:textSize"20sp" 用sp 设置颜色&#xff1a;android:textColor"#00ffff" 设置倍距(行距)&#xff1a;android:lineSpacingMultiplier"2" 设置具体行距&#xff1a;android:lineSpacingExtra&q…

Day06-Java进阶-Arrays数组工具类冒泡排序选择排序二分查找正则表达式正则爬取

1. Arrays数组工具类 package arrays;import java.util.Arrays;public class ArraysDemo {/*Arrays类常用方法 :----------------------------------------------------------------------public static String toString (类型[] a) : 将数组元素拼接为带有格式的字符串public …

直接用表征还是润色改写?LLM用于文生图prompt语义增强的两种范式

直接用表征还是润色改写&#xff1f;LLM用于文生图prompt语义增强的两种范式 导语 目前的文生图模型大多数都是使用 CLIP text encoder 作为 prompt 文本编码器。众所周知&#xff0c;由于训练数据是从网络上爬取的简单图文对&#xff0c;CLIP 只能理解简单语义&#xff0c;而…

SpringBoot引入第三方jar包或本地jar包

idea2018创建spring boot项目 New Project窗口选择Spring Initializr Type选择Maven(Generate…),有两个Maven选择这一个。 勾选Spring Web。 pom.xml中version改成2.5.10。 在resources中新建jar目录&#xff0c;将第三方jar包fastjson2-2.0.47.jar放入其中。&#xff08…

星球大战绝地幸存者XGP微软商店免费领取教程(XGP注册+开通)

星球大战绝地幸存者XGP微软商店免费领取教程&#xff08;XGP注册开通&#xff09; 《星球大战绝地幸存者》这款游戏是由重生游戏工作室制作&#xff0c;EA发行的冒险类动作游戏&#xff0c;续写了《星球大战绝地&#xff1a;陨落的武士团》中的故事。在这款银河系第三人称动作…

数据仓库与数据挖掘(实验一2024.4.24)

实验准备&#xff1a; 1.下载conda 2.配置环境C:\ProgramData\miniconda3\Scripts 3.创建文件夹panda进入虚拟环境qq 激活虚拟环境&#xff1a;activate qq 启动jupyter lab&#xff08;python语言环境编译&#xff09;&#xff1a;jupyter lab 4.panda下载 &#xff08;…

C 语言实例 - 数值比较

比较两个数 以下实例中定义了两个整数变量&#xff0c;并使用 if 来比较两个数值&#xff0c;可以先看下逻辑图&#xff1a; #include <stdio.h>int main() {int a, b;a 11;b 99;// 也可以通过以下代码实现让用户在终端输入两个数// printf("输入第一个值:&quo…

VS2022配置和搭建QT

一、下载QT 可以去QT官网下载:https://www.qt.io/product/development-tools。 直接安装。 二、安装qt插件 直接在vs插件市场搜索就行。 安装的时候根据提示&#xff0c;关闭vs自动安装 再次进去vs提示你选择qt版本&#xff0c;psth里边找到安装版本的qmake.exe就行 配…

如何让一个大几千页的打开巨慢的 PDF 秒开

生成 PDF 的方法&#xff0c;无论软件还是纯命令的都有很多种&#xff0c;排除计算机性能的因素&#xff0c;并不是所有的方法生成几千页的 PDF 都能丝滑到秒开。 示例 PDF 文档 6 千多页 打开要等一会儿&#xff0c;再等一会儿…… 解决方法 方法一、拆分再合并&#xff08…

css盒子设置圆角边框的方法

前言 欢迎来到我的博客 个人主页&#xff1a;北岭敲键盘的荒漠猫-CSDN博客 本文为我整理的设置圆角边框的方法 需求描述 我们在设置盒子边框时&#xff0c;他总是方方正正的。 我们想让这个直直的边框委婉一点该怎么办呢。这个就提到了我们这篇文章讲的东西&#xff1a; bord…

接口测试|超详细面试题【附答案】

今天给姐妹们整理了一套超详细的附答案的接口测试面试题&#xff0c;姐妹们快学起来吧~ 接口测试的重要性&#xff0c;相信不用我多说了。接口测试是现在软件测试工程师一个加分项。因为很多朋友一开始做了几年的软件测试都是在做功能测试&#xff0c;做界面UI的测试&#xff…

ClickHouse用UDF解析XML字符串和XML文件

一.如果是读取xml文件的时候&#xff0c;文件入库需要使用文件读取UDF 创建了1个测试文件 wsdFileRead()&#xff1a; 直接读取文件内容 SELECT wsdFileRead(/home/temp/wsd_test.xml)Query id: 09b6e5fe-7169-43f7-b001-90e2eeabb8da┌─wsdFileRead(/home/temp/wsd_test.xm…