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

C++自学之路1:Hello world

C++ 语法基础

本文主要通过Hello world这样一个简单的c++程序来认识C++的基础语法框架

本文内容主要来自OI wiki

#include <iostream>  // 引用头文件int main() 			 // 定义 main 函数
{                     std::cout << "Hello, world!";  // 使用标准命名空间中的 cout 函数return 0;  // 返回 0,结束 main 函数。编译器一般会自动加上这一行,一般可以省略
}
#include <stdio.h>  // 引用头文件int main() 					// 定义 main 函数
{                printf("Hello, world!");  // 输出 Hello, world!return 0;                 // 返回 0,结束 main 函数
}

1、什么是 #include

#include 其实是一个预处理命令,意思为将一个文件「放」在这条语句处,被「放」的文件被称为头文件。也就是说,在编译时,编译器会「复制」头文件 iostream 中的内容,「粘贴」到 #include <iostream> 这条语句处。这样,你就可以使用 iostream 中提供的 std::cinstd::coutstd::endl 等对象了。

如果你学过 C 语言,你会发现目前我们接触的 C++ 中的头文件一般都不带 .h 后缀,而那些 C 语言中的头文件 xx.h 都变成了 cxx,如 stdio.h 变成了 cstdio。因为 C++ 为了和 C 保持兼容,都直接使用了 C 语言中的头文件,为了区分 C++ 的头文件和 C 的头文件,使用了 c 前缀。

一般来说,应当根据你需要编写的 C++ 程序的需要来确定你要 #include 哪些头文件。但如果你 #include 了多余的头文件,只会增加编译时间,几乎不会对运行时间造成影响。目前我们只接触到了 iostream 和 cstdio 两个头文件,如果你只需要 scanf 和 printf,就可以不用 #include <iostream>

可以 #include 自己写的头文件吗?答案是,可以。

你可以自己写一个头文件,如:myheader.h。然后,将其放到和你的代码相同的目录里,再 #include "myheader.h" 即可。需要注意的是,自定义的头文件需要使用引号而非尖括号。当然,你也可以使用编译命令 -I <header_file_path> 来告诉编译器在哪找头文件,就不需要将头文件放到和代码相同的目录里了。

2、什么是 main()

可以理解为程序运行时就会执行 main() 中的代码。

实际上,main 函数是由系统或外部程序调用的。如,你在命令行中调用了你的程序,也就是调用了你程序中的 main 函数(在此之前先完成了全局 变量 的构造)。

最后的 return 0; 表示程序运行成功。默认情况下,程序结束时返回 0 表示一切正常,否则返回值表示错误代码(在 Windows 下这个错误代码的十六进制可以通过 Windows Error Codes 网站 进行查询)。这个值返回给谁呢?其实就是调用你写的程序的系统或外部程序,它会在你的程序结束时接收到这个返回值。如果不写 return 语句的话,程序正常结束默认返回值也是 0。

在 C 或 C++ 中,程序的返回值不为 0 会导致运行时错误(RE)。

3、注释

在 C++ 代码中,注释有两种写法:

  1. 行内注释

    // 开头,行内位于其后的内容全部为注释。

  2. 注释块

    /* 开头,*/ 结尾,中间的内容全部为注释,可以跨行。

注释对程序运行没有影响,可以用来解释程序的意思,还可以在让某段代码不执行(但是依然保留在源文件里)。

在工程开发中,注释可以便于日后维护、他人阅读。

//这是一行注释/*这是
多行注释*/#include <iostream> int main() 			 
{                     //std::cout << "Hello, world!";  // 这段代码被注释掉了,不会执行,可以用这个技巧来找Bugreturn 0;  
}

4、输入与输出

cincout

#include <iostream>int main() 
{int x, y;                          // 声明变量std::cin >> x >> y;                // 读入 x 和 ystd::cout << y << std::endl << x;  // 输出 y,换行,再输出 xreturn 0;                          // 结束主函数
}

endl的功能是换行。

这里可以直接使用命名空间std,这样就不用反复输入std::了:

#include <iostream>
using namespace std;
int main() 
{int x, y;                          // 声明变量cin >> x >> y;                	 // 读入 x 和 ycout << y << endl << x; 		 	 // 输出 y,换行,再输出 xreturn 0;                          // 结束主函数
}

scanfprintf

scanfprintf 其实是 C 语言提供的函数。大多数情况下,它们的速度比 cincout 更快,并且能够方便地控制输入输出格式。在C++里想要控制输入输出格式需要用到一些头文件,如iomanip

#include <cstdio>int main() 
{int x, y;scanf("%d%d", &x, &y);   // 读入 x 和 yprintf("%d\n%d", y, x);  // 输出 y,换行,再输出 xreturn 0;
}

其中,类型标识符%d 表示读入/输出的变量是一个有符号整型(int 型)的变量。

类似的类型标识符还有:

  1. %s 表示字符串。
  2. %c 表示字符。
  3. %lf 表示双精度浮点数 (double)。
  4. %lld 表示长整型 (long long)。根据系统不同,也可能是 %I64d
  5. %u 表示无符号整型 (unsigned int)。
  6. %llu 表示无符号长整型 (unsigned long long),也可能是 %I64u

除了类型标识符以外,还有一些控制格式的方式。许多都不常用,选取两个常用的列举如下:

  1. %1d 表示长度为 1 的整型。在读入时,即使没有空格也可以逐位读入数字。在输出时,若指定的长度大于数字的位数,就会在数字前用空格填充。若指定的长度小于数字的位数,就没有效果。
  2. %.6lf,用于输出,保留六位小数。

这两种运算符的相应地方都可以填入其他数字,例如 %.3lf 表示保留三位小数。

http://www.jsqmd.com/news/55513/

相关文章:

  • 《代码大全》读后感四
  • k8s 笔记
  • 11月第二篇笔记
  • 《代码大全》读后感五
  • 网安学习day x 天
  • 关于synchronized-reentrantlock-volatile学习总结1.0
  • nginx:普通用户使用80端口启动nginx报错,nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)
  • NOIP2025 赛后彻底自我反省
  • CVE-2017-16894
  • 2025最新云南/昆明AI直播服务商推荐!云南本土科技企业权威榜单发布,资质技术双优助力企业数字化转型贤邦科技/云南AI直播公司推荐
  • 2025年度云南/昆明企业数字化服务/人工智能服务商优选推荐——贤邦科技,深耕云南市场,短视频制作/短视频运营/AI数字/小程序开发/AI直播全栈解决
  • 2025 年杭州富阳区摄影培训人像摄影培训推荐榜:路人贾摄影讲堂 全杭州10个区覆盖、人像摄影十杰创办
  • redis:linux安装redis
  • 2025 年杭州萧山区摄影培训人像摄影培训推荐榜:路人贾摄影讲堂 全杭州10个区覆盖、人像摄影十杰创办
  • 亚马逊为 Bedrock AgentCore 添加 A2A 协议,实现多智能体系统协作 - 公众号
  • 亚马逊为 Bedrock AgentCore 添加 A2A 协议,实现多智能体系统协作 - 公众号
  • 2025年杭州临平区摄影培训人像摄影培训推荐榜:路人贾摄影讲堂 全杭州10个区覆盖、人像摄影十杰创办
  • 详细介绍:X-Token 系列 HTTP 头部详解
  • 2025最新AI直播服务商推荐!智能直播技术领航者榜单发布,赋能企业数字化营销新生态
  • 2025最新小程序开发服务商权威推荐!云南本土科技企业TOP榜单发布
  • 使用 Vibe Coding 构建 AI 自动化评测系统
  • 程序的机器级表示-常数、变量、运算
  • 香橙派上进行 Livox Mid-360 激光雷达开发(一)基本环节配置
  • 2025 年杭州拱墅区摄影培训人像摄影培训推荐榜:路人贾摄影讲堂 全杭州10个区覆盖、人像摄影十杰创办
  • 深入解析:打造高清3D虚拟世界|零基础学习Unity HDRP高清渲染管线(第十一天)
  • npm1300 如何导入模型
  • 2025最新小程序开发服务商推荐!云南地区权威榜单发布,技术与服务双优助力企业数字化转型
  • npm1300 的建模目的
  • iapp逆向,lib.so第一层密钥计算工具
  • npm1300 建模工具与流程