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

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。
使用来自其他名称空间的所有符号污染全局名称空间在任何生产代码库中都是一个严重的问题,您应该从一开始就避免使用这种反模式。

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

相关文章:

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

C初学者指南第一步—2. Hello world 目录 C初学者指南第一步---2. Hello world1.源文件 “Hello.cpp”2.编译hello.cpp3.术语4.编译器标志5.不要使用 “using namespace std;” &#xff01; 1.源文件 “Hello.cpp” #include <iostream> // our first program int main…...

gitLab批量下载有权限的项目

前言 参考 https://www.jianshu.com/p/b3d4e5cee835 适用于git私服拉取个人所涉及权限的代码&#xff0c;方便有多个项目权限的人快速拉取自己所有权限的代码。 默认生成目录结构与gitlab一致 步骤一:获取权限你的代码权限文件d 从gitlab私服生成所有你有权限的代码信息 …...

解决 kali 中使用 vulhub 拉取不到镜像问题

由于默认情况下&#xff0c;访问的镜像是国外的&#xff0c;而从 2023 年开始&#xff0c;docker 的镜像网站就一直访问不了&#xff0c;所以我们可以把镜像地址改成国内的阿里云镜像地址。 1、在 cd /etc/docker/目录下创建或修改daemon.json文件 sudo touch daemon.json 2、在…...

CSS3 简介

CSS3 简介 CSS3&#xff0c;即层叠样式表的第三代&#xff0c;是网页设计和开发中不可或缺的技术之一。它为HTML元素提供了更加丰富和灵活的样式定义&#xff0c;使得网页不仅结构清晰&#xff0c;而且外观精美、交互性强。CSS3继承了CSS2的基本特性&#xff0c;并引入了许多新…...

springboot事务管理的机制是什么

SpringBoot的事务管理机制实质上是基于Spring框架的事务处理机制。其主要目的是确保一系列数据库操作要么全部成功&#xff0c;要么全部失败&#xff08;回滚&#xff09;&#xff0c;从而维护数据的完整性和一致性。 SpringBoot事务管理遵循ACID四大特性&#xff1a; 1、原子…...

Linux下tar命令解压缩

tar 命令是 Unix 和 Linux 系统中用来创建归档文件以及提取归档文件的工具。它通常用于备份文件或将多个文件和目录打包成一个单独的归档文件。默认情况下&#xff0c;tar 不会对文件进行压缩&#xff0c;但可以通过结合其他压缩工具&#xff08;如 gzip 或 bzip2&#xff09;来…...

当财政支持减弱时,国有企业如何实现降本增效?

随着市场环境的不断变化和上级市场化政策要求的不断推进&#xff0c;部分国有企业面临着双重压力&#xff0c;一方面&#xff0c;市场的快速变革要求企业不断创新、提升竞争力&#xff1b;另一方面&#xff0c;在响应上级市场化转型的号召下&#xff0c;财政支持的减弱成为了许…...

大模型「训练」与「微调」概念详解【6000字长文】

本文你将学到什么 1、大模型预训练与微调的基本流程 2、预训练、训练、后期预训练、微调的区别 3、大模型训练与微调的一些概念&#xff0c;如&#xff1a; Post-pretrain、SFT、RLHF、模型对齐、Lora、Q-Lora、大模型量化、微调指标、微调参数、大模型评测指标 预训练与微…...

JVM 垃圾回收器

一、垃圾回收器类型 如果说垃圾收集算法是内存回收的方法论&#xff0c;那么垃圾收集器就是内存回收的具体 实现。下图展示了7种作用于不同分代的收集器&#xff0c;其中用于回收新生代的收集器 包括Serial、PraNew、Parallel Scavenge&#xff0c;回收老年代的收集器包括Seri…...

Spring IOC 容器的构建流程?

Spring loc (Inversion of Control) 是一种设计模式&#xff0c;其中对象的创建和依赖关系由框架管理&#xff0c;而不是由应用程序直接管理。Spring loc容器是Spring框架的核心&#xff0c;它使用loC模式来管理应用程序中的对象 Spring loC容器的构建过程如下: 1.配置元数据…...

官方文档 搬运 MAXMIND IP定位 mysql导入 简单使用

官方文档地址&#xff1a; 官方文档 文件下载 1. 导入mysql可能报错 Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement 查看配置 SHOW GLOBAL VARIABLES LIKE %secure%;secure_file_priv 原来…...

PHP入门教程1:PHP的基础概念和基本语法

本文将从基础开始&#xff0c;介绍PHP的基础概念和基本语法。 PHP简介环境搭建基本语法变量和常量数据类型操作符常见错误和调试方法 1. PHP简介 PHP&#xff0c;全称是 “PHP: Hypertext Preprocessor”&#xff0c;是一种开源的通用脚本语言&#xff0c;尤其适用于Web开发…...

头歌资源库(5)求阶乘问题

一、 问题描述 请输入一个50至100之间的整数n&#xff0c;求解n! 二、算法思想 输入一个50至100之间的整数n。声明一个变量result&#xff0c;并将其初始化为1&#xff0c;用于保存n的阶乘。使用一个循环&#xff0c;从1到n&#xff0c;循环变量为i。在循环中&#xff0c;将…...

09:整型与布尔型的转换

OpenJudge - 09:整型与布尔型的转换 描述 将一个整型变量的值赋给一个布尔型变量&#xff0c;再将这个布尔型变量的值赋给一个整型变量&#xff0c;得到的值是多少&#xff1f; 输入 一个整型范围内的整数&#xff0c;即初始时整型变量的值。 输出 一个整数&#xff0c;经过上述…...

51单片机STC89C52RC——2.1 独立按键控制LED亮灭

目录 目的 一&#xff0c;STC单片机模块 二&#xff0c;独立按键 2.1 独立按键位置 2.2 独立按键电路图 三&#xff0c;创建Keil项目 四&#xff0c;代码 五&#xff0c;代码编译、下载到51单片机 六&#xff0c;效果 目的 当独立K1按键按下时LED D1 点亮&#x…...

系统架构师考点--计算机硬件

大家好。今天我总结一下计算机硬件的一些考点。 一、中央处理单元&#xff08;CPU&#xff09; 我们知道&#xff0c;计算机的基本硬件系统由运算器、控制器、存储器、输入设备和输出设备5大部件组成。其中运算器、控制器等部件被集成在一起统称为中央处理单元(Central Proce…...

vite-plugin-mock前端自行模拟接口返回数据的插件

vite-plugin-mock前端自行模拟接口返回数据的插件 安装导入、配置&#xff08;vite.config.js&#xff09;使用目录结构/mock/user.js具体在页面请求中的使用 注意事项 中文文档&#xff1a;[https://gitcode.com/vbenjs/vite-plugin-mock/blob/main/README.zh_CN.md) 参考其他…...

网络安全知识全景地图V1.0 - 20240616更新

网络安全领域的知识全景涵盖了从基础概念到高级技术的广泛内容。博主基于自身十年多的工作经验结合CISSP认证官方教材按照不同的主题和层次梳理出如下高层次的概览地图&#xff0c;可以帮助个人和组织理解网络安全领域的主题。 1.1. 基础理论 1.1.1. 网络安全概述 网络安全的…...

力扣19. 删除链表的倒数第N个节点

给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[] 示例…...

电脑找不到vcruntime140_1.dll的原因分析及5种解决方法分享

电脑已经成为我们生活和工作中不可或缺的工具。然而&#xff0c;在使用电脑的过程中&#xff0c;我们常常会遇到一些常见的问题&#xff0c;其中之一就是电脑显示vcruntime140_1.dll丢失。那么&#xff0c;这个问题是怎么回事呢&#xff1f;又有哪些解决方法呢&#xff1f;如何…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...