C++ 教程(02)---- 环境设置

news2025/1/21 1:00:53

本地环境设置

如果您想要设置 C++ 语言环境,您需要确保电脑上有以下两款可用的软件,文本编辑器和 C++ 编译器。

文本编辑器

这将用于输入您的程序。文本编辑器包括 Windows Notepad、OS Edit command、Brief、Epsilon、EMACS 和 vim/vi。

文本编辑器的名称和版本在不同的操作系统上可能会有所不同。例如,Notepad 通常用于 Windows 操作系统上,vim/vi 可用于 Windows 和 Linux/UNIX 操作系统上。

通过编辑器创建的文件通常称为源文件,源文件包含程序源代码。C++ 程序的源文件通常使用扩展名 .cpp、.cp 或 .c。

在开始编程之前,请确保您有一个文本编辑器,且有足够的经验来编写一个计算机程序,然后把它保存在一个文件中,编译并执行它。

C++ 编译器

写在源文件中的源代码是人类可读的源。它需要"编译",转为机器语言,这样 CPU 可以按给定指令执行程序。

C++ 编译器用于把源代码编译成最终的可执行程序。

大多数的 C++ 编译器并不在乎源文件的扩展名,但是如果您未指定扩展名,则默认使用 .cpp。

最常用的免费可用的编译器是 GNU 的 C/C++ 编译器,如果您使用的是 HP 或 Solaris,则可以使用各自操作系统上的编译器。

以下部分将指导您如何在不同的操作系统上安装 GNU 的 C/C++ 编译器。这里同时提到 C/C++,主要是因为 GNU 的 gcc 编译器适合于 C 和 C++ 编程语言。

安装 GNU 的 C/C++ 编译器

UNIX/Linux 上的安装

如果您使用的是 Linux 或 UNIX,请在命令行使用下面的命令来检查您的系统上是否安装了 GCC:

$ g++ -v

如果您的计算机上已经安装了 GNU 编译器,则会显示如下消息:

Using built-in specs.
Target: i386-redhat-linux
Configured with: ../configure --prefix=/usr .......
Thread model: posix
gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)

如果未安装 GCC,那么请按照 Installing GCC- GNU Project 上的详细说明安装 GCC。

Mac OS X 上的安装

如果您使用的是 Mac OS X,最快捷的获取 GCC 的方法是从苹果的网站上下载 Xcode 开发环境,并按照安装说明进行安装。一旦安装上 Xcode,您就能使用 GNU 编译器。

Xcode 目前可从Sign In - Apple上下载,需要使用 apple ID 登录 。

Windows 上的安装

为了在 Windows 上安装 GCC,您需要安装 MinGW。为了安装 MinGW,请访问 MinGW 的主页 mingw-w64.org
,进入 MinGW 下载页面,下载最新版本的 MinGW 安装程序,命名格式为 MinGW-<version>.exe。

当安装 MinGW 时,您至少要安装 gcc-core、gcc-g++、binutils 和 MinGW runtime,但是一般情况下都会安装更多其他的项。

添加您安装的 MinGW 的 bin 子目录到您的 PATH 环境变量中,这样您就可以在命令行中通过简单的名称来指定这些工具。

当完成安装时,您可以从 Windows 命令行上运行 gcc、g++、ar、ranlib、dlltool 和其他一些 GNU 工具。


使用 Visual Studio (Graphical Interface) 编译

1、下载及安装 Visual Studio Community 2015

2、打开 Visual Studio Community

3、点击 File -> New -> Project

4、左侧列表选择 Templates -> Visual C++ -> Win32 Console Application,并设置项目名为 MyFirstProgram。

5、点击 OK。

6、在以下窗口中点击 Next

7、在弹出的窗口中选择 Empty project 选项后,点击 Finish 按钮:

8、右击文件夹 Source File 并点击 Add --> New Item... :

9、选择 C++ File 然后设置文件名为 main.cpp,然后点击 Add:

10、拷贝以下代码到 main.cpp 中:

#include <iostream>

int main()
{
    std::cout << "Hello World!\n";
    return 0;
}

界面如下所示:

11、点击菜单上的 Debug -> Start Without Debugging (或按下 ctrl + F5) :

12、完成以上操作后,你可以看到以下输出:


g++ 应用说明

程序 g++ 是将 gcc 默认语言设为 C++ 的一个特殊的版本,链接时它自动使用 C++ 标准库而不用 C 标准库。通过遵循源码的命名规范并指定对应库的名字,用 gcc 来编译链接 C++ 程序是可行的,如下例所示:

$ gcc main.cpp -lstdc++ -o main

下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码:

#include <iostream>
using namespace std;
int main()
{
    cout << "Hello, world!" << endl;
    return 0;
}

最简单的编译方式:

$ g++ helloworld.cpp

由于命令行中未指定可执行程序的文件名,编译器采用默认的 a.out。程序可以这样来运行:

$ ./a.out
Hello, world!

通常我们使用 -o 选项指定可执行程序的文件名,以下实例生成一个 helloworld 的可执行文件:

$ g++ helloworld.cpp -o helloworld

执行 helloworld:

$ ./helloworld
Hello, world!

如果是多个 C++ 代码文件,如 runoob1.cpp、runoob2.cpp,编译命令如下:

$ g++ runoob1.cpp runoob2.cpp -o runoob

生成一个 runoob 可执行文件。

g++ 有些系统默认是使用 C++98,我们可以指定使用 C++11 来编译 main.cpp 文件:

g++ -g -Wall -std=c++11 main.cpp

g++ 常用命令选项

选项解释
-ansi只支持 ANSI 标准的 C 语法。这一选项将禁止 GNU C 的某些特色, 例如 asm 或 typeof 关键词。
-c只编译并生成目标文件。
-DMACRO以字符串"1"定义 MACRO 宏。
-DMACRO=DEFN以字符串"DEFN"定义 MACRO 宏。
-E只运行 C 预编译器。
-g生成调试信息。GNU 调试器可利用该信息。
-IDIRECTORY指定额外的头文件搜索路径DIRECTORY。
-LDIRECTORY指定额外的函数库搜索路径DIRECTORY。
-lLIBRARY连接时搜索指定的函数库LIBRARY。
-m486针对 486 进行代码优化。
-oFILE 生成指定的输出文件。用在生成可执行文件时。
-O0不进行优化处理。
-O或 -O1 优化生成代码。
-O2进一步优化。
-O3比 -O2 更进一步优化,包括 inline 函数。
-shared生成共享目标文件。通常用在建立共享库时。
-static禁止使用共享连接。
-UMACRO取消对 MACRO 宏的定义。
-w不生成任何警告信息。
-Wall生成所有警告信息。

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

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

相关文章

技术架构演进

架构演进 单机架构应用数据分离架构应用服务集群架构读写 主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构实际互联网架构 单机架构 单机架构&#xff1a; 用户访问量很少&#xff0c;没有对我们的性能、安全等提出很高的要求&#xff0c;而且系统架构简单&#x…

Pilota:为什么一个代码生成工具如此复杂丨GOTC Rust系列分享

对于一个 Rust RPC 框架来说&#xff0c;根据 IDL 做代码生成是为了让用户更方便地使用框架。而生成代码的质量以及周边能力都会对用户的开发体验有着非常非常直接的影响。 所以&#xff0c;字节跳动 CloudWeGo 开发了 Pilota 这样的一个框架&#xff0c;来为用户生成良好的代码…

Redis延时双删

1.为什么缓存和MySQL数据没有保持一致性&#xff1f; 数据一致性是什么意思&#xff0c;“一致性”包含如下情况&#xff1a; 若缓存中有数据&#xff0c;则缓存的数据值需要和DB值相同若缓存无数据&#xff0c;则DB值必须是最新值 不符合这两种情况的&#xff0c;都属于缓存…

【OJ比赛日历】快周末了,不来一场比赛吗? #06.10-06.16 #12场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 2023-06-10&#xff08;周六&#xff09; #4场比赛2023-06-11…

实验五 标准ACL的配置【网络安全】

实验五 标准ACL的配置【网络安全】 前言推荐实验五 标准ACL的配置问题方案步骤 最后 前言 2023-6-8 18:54:22 以下内容源自《【网络安全】》 仅供学习交流使用 推荐 配置标准ACL 实验五 标准ACL的配置 问题 络调通后&#xff0c;保证网络是通畅的。同时也很可能出现未经…

软件测试与打螺丝

单元测试中的FIRST代表下面五组英文单词对应的原则&#xff1a; FastIsolated / IndependentRepeatableSelf-validatingTimely / Thorough 软件开发中&#xff0c;往往会因为我们没有注意到的逻辑或难以理解的代码&#xff0c;而引进Bug来。 怎么尽早地发现Bug&#xff0c;…

【springCloud-2】Ribbon负载均衡

负载均衡&#xff0c;一般分为服务端负载均衡和客户端负载均衡。 服务端&#xff1a;如Nginx&#xff0c;F5等&#xff0c;请求到达服务器后进行负载均衡。 客户端&#xff1a;客户端获取到服务端的列表&#xff0c;自己经过一定的计算后选择某一台访问。 ribbon实现的就是客…

Monica: 您的又一个免费ChatGPT 4.0

最近 ChatGPT 又开始封号了&#xff0c;主要原因如下&#xff1a; 违反使用条款&#xff1a;如果用户违反了平台或应用的使用条款&#xff0c;例如发布违法、恶意或滥用行为的内容&#xff0c;侵犯他人的权利&#xff0c;或者从事垃圾信息传播等&#xff0c;管理员可能会采取封…

多方合作时,系统间的交互是怎么做的?

大家好&#xff01;我是sum墨&#xff0c;一个一线的底层码农&#xff0c;平时喜欢研究和思考一些技术相关的问题并整理成文&#xff0c;限于本人水平&#xff0c;如果文章和代码有表述不当之处&#xff0c;还请不吝赐教。 以下是正文&#xff01; 文章背景 我们最近做了很多…

【资料分享】ESD基本概念及ESD产生来源详解

CMOS工艺集成电路制造技术已经进入纳米时代&#xff0c;随着特征尺寸的降低&#xff0c;ESD (Electro-Static Discharge&#xff0c;静电放电&#xff09;问题越来越成为集成电路中最主要的可靠性问题。 ESD基本概念 ESD定义&#xff1a;ESD&#xff08;Electro-Static disc…

垄断与市场力量

五力竞争分析模型 供应商的判断能力购买者的判断能力新进入者的威胁现有的竞争对手产品和服务的替代品的压力产品和服务的互补品 政府决策价值定位 服务哪些客户?满足这些客户的哪些需求?收取什么价格?垄断企业的经营 竞争企业是价格接受者,而垄断企业是价格制定者。 市场…

PURE:A Frustratingly Easy Approach for Entity and Relation Extraction

原文链接&#xff1a; https://aclanthology.org/2021.naacl-main.5.pdf ACL 2021 介绍 对于命名实体识别和关系提取&#xff0c;最近的研究要么在这两个任务上使用一个预训练结构&#xff0c;要么通过共享表征来进行多任务学习。作者认为实体模型和关系模型在上下文表征中学到…

kotlin的abstract抽象类与interface接口建模按钮android点击事件处理

kotlin的abstract抽象类与interface接口建模按钮android点击事件处理 例如&#xff1a; abstract class View {private var listener: OnClickListener? nullprivate var enabled: Boolean falseconstructor() {println("view constructor")}fun setClickListen…

用法详解!postman接口自动化如何进行环境变量

目录 前言&#xff1a; 1.设置环境变量 2.设置全局变量 3.检查response body中是否包含某个string 4.检测JSON中的某个值是否等于预期的值 5.转换XML body为JSON对象 6.检查response body是否与某个string相等 7.测试response Headers中的某个元素是否存在(如:Content-…

自然语言处理: N-Gram实战

自然语言处理: 第一章N-Gram 一. 理论 定义: 语言模型在wiki的定义是统计式的语言模型是一个几率分布&#xff0c;给定一个长度为 m 的字词所组成的字串 W1 , W2 &#xff0c; &#xff0c;Wn &#xff0c;派几率的字符串P(S) P(W1 , W2 , &#xff0c;Wn &#xff0c; )而其…

web audio音效播放器/音乐播放器

这是一个基于Web Audio API、HTML和CSS构建的高级网页音频播放器。它允许用户播放音频文件、控制播放、可视化音频&#xff0c;并应用音频效果和过滤器。 Github仓库&#xff1a; https://github.com/sonichen/Web-Based-Audio-Player 希望大家多多star 环境 操作系统&#…

Android逆向解析加壳与脱壳技术

加壳 加壳是指在 APK 文件中插入额外的代码或数据&#xff0c;使得原始代码难以被分析和反编译。通常加壳是为了保护软件的知识产权或者防止逆向工程。下面是 Android 加壳的一般流程&#xff1a; 选择加壳工具&#xff1a;选择合适的加壳工具进行加壳&#xff0c;比如市面上…

【SpringCloud-1】注册中心-Eureka

springcloud微服务&#xff0c;相对于dubbo这种SOA架构&#xff0c;提供了一站式的全套解决方案&#xff0c;什么意思呢&#xff1f;就是说springcloud不需要依赖其他组件&#xff0c;自己提供了全套的 常规项目需要使用的技术和解决问题的方案。 比如dubbo需要依赖zk作为注册…

一文读懂二叉树

大家好&#xff0c;我是三叔&#xff0c;很高兴这期又和大家见面了&#xff0c;一个奋斗在互联网的打工人。 什么是二叉树 二叉树是一种由节点&#xff08;Node&#xff09;组成的数据结构&#xff0c;每个节点最多有两个子节点。它具有良好的层次结构&#xff0c;便于搜索和…

chatgpt赋能python:Python如何将IP地址转换为整数

Python如何将IP地址转换为整数 在计算机网络中&#xff0c;IP地址是一个包含32位的二进制数字&#xff0c;通常由四个8位二进制数字&#xff08;即“点分十进制”&#xff09;表示。但在某些情况下&#xff0c;需要将IP地址转换为整数&#xff0c;例如在网络编程中检查网络连接…