C++初学者指南第一步---2. Hello world

C++初学者指南第一步—2. Hello world

目录

  • C++初学者指南第一步---2. Hello world
    • 1.源文件 “Hello.cpp”
    • 2.编译hello.cpp
    • 3.术语
    • 4.编译器标志
    • 5.不要使用 “using namespace std;” !

1.源文件 “Hello.cpp”

#include <iostream>
// our first program
int main() 
{std::cout << "Hello world!\n";
}

详细解释一下上面的代码

#include <iostream>
  • 此行将替换为文件 iostream 的内容
  • iostream 是编译器目录中的头文件,提供输入流和输出流功能
  • #include“路径/文件名” ⇒插入文件的内容
  • #include<文件名>⇒相同,但在所有包含目录中搜索文件
  • 编译前发生⇒编译器只“看”到已经预处理过的文件
// our first program

这是一行注释,编译器将忽略注释。
// 单行注释
/* C语言风格
多行注释 */

int main()
  • 定义一个名为“main”的函数
  • 每个程序都从执行 main 函数开始
  • int 是main函数指定的允许的返回类型(int 代表一个整型数)
  • () 是一个空的参数列表
{
  • 语句块用大括号括起来 { …}
  • 语句以分号(;)结尾
std::cout << "Hello world!\n";
  • 此语句将文本写入控制台
  • std 是标准库的命名空间
  • cout(“character out”的缩写)是指标准(控制台)输出
  • "Hello World\n"是一个字符串文字, 一系列字符
  • \n 是特殊字符:换行符
}
  • 程序在执行 main 函数后终止
  • 它将自动返回 0如果没有给出 return(0表示成功)语句
  • 执行程序的操作系统将返回0以外的代码解释为错误

2.编译hello.cpp

C++是一种编译语言

  • 源代码无法直接运行
  • 代码被写入一个抽象的机器模型:编译器(稍后会详细介绍)
  • 编译器将源代码转换为CPU理解的二进制机器代码
  • 可以运行的程序 = 包含机器代码的二进制可执行文件
$ g++ hello.cpp -o sayhello   //编译和链接
$ ./sayhello                  //运行程序
Hello World                   //程序输出

下图是编译和链接过程:预处理=>编译=>链接,最后得到二进制可执行文件sayhello。
在这里插入图片描述

3.术语

  • Compiler Error = program not compilable, compiler will stop
    编译器错误 = 程序不可编译,编译器将停止
  • Compiler Warning = program compilable, compiler will continue, but there is a problematic piece of code that might lead to runtime bugs
    编译器警告 = 程序可编译,编译器将继续,但有一段有问题的代码可能会导致运行时错误
    -static = fixed at compile time (baked into the executable file, not changeable at runtime)
    静态 = 在编译时固定(嵌入到可执行文件中,在运行时不可更改)
    -dynamic = changeable at runtime (possibly by user input)
    动态 = 在运行时可更改(可能由用户输入)

4.编译器标志

为您的第一个程序推荐的编译器标志

g++ -std=c++20 -Wall -Wextra -Wpedantic -Wshadow input.cpp -o output
  • -std=c++20-std=c++20 将编译器设置为 C++20 标准。强烈推荐。
  • -Wall -Wpedantic -Wextra -Wshadow 启用编译器警告。强烈推荐。这些并不是真正激活所有的警告,而是激活那些最重要的、不会产生太多(误报)的警告。
  • -o 设置输出(可执行)文件的名称。

现在是 2024年——将你的编译器设置为 C++20(或者至少设置为 C++17,如果你必须使用较旧的编译器)。

5.不要使用 “using namespace std;” !

许多代码示例/教程都显示了这样的内容:

using namespace std;
int main () {cout << "bla\n";
}

目的是避免使用 std:: 限定 cout。
但是
使用名称空间将该名称空间中的所有符号拖放到全局名称空间中。这可能会导致名称冲突和歧义,在某些情况下甚至会导致只在运行时才会出现并且很难检测到的bug。
使用来自其他名称空间的所有符号污染全局名称空间在任何生产代码库中都是一个严重的问题,您应该从一开始就避免使用这种反模式。

附上原文地址
翻译整理不易,如果文章对您有用请随手点个赞,谢谢!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SqlSugar使用DbFirst对象根据数据库表结构创建实体类-C#

本文所述开发环境&#xff1a;.C#、NET8、Visual Studio2022 1. 在项目中安装SqlSugar 在Visual Studio2022中新建一个 C# 的控制台应用程序&#xff0c;框架选择 .Net8。新建后如下图所示&#xff1a; 然后打开NuGet程序包管理器 搜索 SqlSugarCore 并安装 安装后在解决方案…

【Linux】 进程信号的发生

送给大家一句话&#xff1a; 何必向不值得的人证明什么&#xff0c;生活得更好&#xff0c;乃是为你自己。 -- 亦舒 进程信号的发生 1 何为信号2 信号概念的基础储备3 信号产生kill系统调用alarm系统调用异常core term Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢…

会声会影色彩校正在哪里 会声会影色彩素材栏在哪 会声会影中文免费版下载

会声会影是一款功能强大的视频编辑软件&#xff0c;它可以帮助用户轻松地编辑和制作视频。在进行视频编辑时&#xff0c;色彩校正是一个重要的步骤&#xff0c;它可以调整视频的色调、亮度和对比度等参数&#xff0c;使视频更加生动和鲜明。在会声会影中&#xff0c;色彩校正功…

linux 部署瑞数6实战(维普,药监局)第一部分

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx 本文章未经许可禁止转载&…

深入浅出談 隐马尔可夫的概念(2/ 2)-- 训练理论

文章目录 一、说明二、HMM 三大问题三、评估问题——前向-后向算法四、.解码问题——维特比算法五、学习问题——EM算法六、 连续隐马尔可夫 一、说明 在许多机器学习的章节中&#xff0c;常常遇见 HMM &#xff0c;往往看到它的数学式子后&#xff0c;就当没看到似的跳过去了…

【Python网络爬虫分步走】使用LXML解析网页数据

Python网络爬虫分步走 – 使用LXML解析网页数据 Web Scraping in Python - Using LXML to Parse Web Data By Jackson@ML Lxml作为Python的第三方库,提供易用的且功能强大的API,用来解析XML和HTML文档。事件驱动的API被用于分步骤解析。 本文简要介绍使用lxml库解析网页的基…

UML与设计模式

1、关联关系 关联关系用于描述不同类的对象之间的结构关系&#xff0c;它在一段时间内将多个类的实例连接在一起。关联关系是一种静态关系&#xff0c;通常与运行状态无关&#xff0c;而是由“常识”、“规则”、“法律”等因素决定的&#xff0c;因此关联关系是一种强关联的关…

北斗三代一体式数传终端短报文

北斗三代一体式数传终端短报文M20C-V30针对船载通信和导航应用推出的一款支持北斗 RDSS/RNSS 功能的船载一体机。北斗数传终端内部集成了北斗多频天线、射频、基带以及主控等功能单元&#xff0c;可实现 RDSS 定位、短报文通信和 RNSS 导航定位等功能。M20C-V30型北斗数传终端体…

牛客练习题打卡(06-15)

run方法线程执行体 .start方法开启多线程 在java中 &#xff0c; 整数类型默认int,带小数默认double ; 如果要指定长整型加L&#xff1b;如果要指定为单精度加F ; 在java中&#xff0c;重载要求方法名相同&#xff0c; 参数列表必须不同&#xff08;个数不同、或类型不同、参数…

Nginx+KeepAlived高可用负载均衡集群的部署

目录 一.KeepAlived补充知识 1.一个合格的群集应该具备的特点 2.健康检查&#xff08;探针&#xff09;常用的工作方式 3.相关面试问题 问题1 问题2 二.Keepealived脑裂现象 1.现象 2.原因 硬件原因 运用配置原因 3.解决 4.预防 方法1 方法2 方法3 方法4 三.…

WWDC 2024 回顾:Apple Intelligence 的发布与解析

一年一度的苹果全球开发者大会&#xff08;WWDC&#xff09;如期而至&#xff0c;2024 年的 WWDC 再次成为科技界的焦点。本次发布会中&#xff0c;苹果正式推出了他们在 AI 领域的全新战略——Apple Intelligence。这一全新概念旨在为用户打造“强大、易用、全面、个性化、注重…

DC/AC电源模块:为电动车充电基础设施提供高效能源转换

BOSHIDA DC/AC电源模块&#xff1a;为电动车充电基础设施提供高效能源转换 DC/AC电源模块是一种用于电动车充电基础设施的重要组件&#xff0c;它能够实现高效能源转换。在电动车的普及和推广过程中&#xff0c;DC/AC电源模块的重要性日益凸显。本文将从DC/AC电源模块的基本原…

CSS 实现个人资料卡

CSS 实现个人资料卡 效果展示 CSS 知识点 CSS 综合知识运用 页面整体布局 <div class"card"><div class"imgBox"><img src"./bg.jpg" /></div><div class"content"><div class"details&quo…

springboot+vue前后端分离项目中使用jwt实现登录认证

文章目录 一、后端代码1.响应工具类2.jwt工具类3.登录用户实体类4.登录接口5.测试接口6.过滤器7.启动类 二、前端代码1.登录页index 页面 三、效果展示 一、后端代码 1.响应工具类 package com.etime.util;import com.etime.vo.ResponseModel; import com.fasterxml.jackson.…

38、基于卷积神经网络(CNN)的车牌自动识别系统(matlab)

1、原理及流程 1&#xff09;原理 CNN&#xff08;卷积神经网络&#xff09;是一种深度学习模型&#xff0c;可以用于图像识别和分类任务。车牌自动识别系统的原理基本上就是使用CNN模型对车牌图像进行处理和识别。 首先&#xff1a;系统需要收集大量的含有车牌的图像数据作…

Vue2+Element-ui实现el-table表格自适应高度

效果图 新建指令 Vue.directive(height, {inserted(el, _binding, vnode) {const paginationRef vnode.context.$refs.paginationRefconst calculateHeight () > {const windowHeight window.innerHeightconst topOffset el.getBoundingClientRect().topconst otherEle…

Java 网站开发入门指南:如何用java写一个网站

Java 网站开发入门指南&#xff1a;如何用java写一个网站 Java 作为一门强大的编程语言&#xff0c;在网站开发领域也占据着重要地位。虽然现在 Python、JavaScript 等语言在网站开发中越来越流行&#xff0c;但 Java 凭借其稳定性、可扩展性和丰富的生态系统&#xff0c;仍然…

【SpringBoot】SpringBoot:构建实时聊天应用

文章目录 引言项目初始化添加依赖 配置WebSocket创建WebSocket配置类创建WebSocket处理器 创建前端页面创建聊天页面 测试与部署示例&#xff1a;编写单元测试 部署扩展功能用户身份验证消息持久化群组聊天 结论 引言 随着实时通信技术的快速发展&#xff0c;聊天应用在现代We…

redis aof写入以及aof重写的源码分析

这里写目录标题 版本aof的面试问题aof正常写入流程aof重写流程 版本 redis&#xff1a;6.2.7 aof的面试问题 最近找工作&#xff0c;面试被问倒了&#xff0c;记录一下 比如redis的aof指令会不会丢失&#xff1f;比如在重写aof的什么新来的操作怎么办&#xff1f; 在重写的…

【云计算】Docker部署Nextcloud网盘并实现随地公网远程访问

配置文件 切换root权限&#xff0c;新建一个nextcloud的文件夹&#xff0c;进入该目录&#xff0c;创建docker-compose.yml [cpslocalhost ~]$ su root Password: 666666 [rootlocalhost cps]# ls Desktop Documents Downloads Music Pictures Public Templates Vide…