C++基础学习笔记:第一章、第二章
文章目录
- 第1章
- 第2节 C++开发环境与相关工具
- 第3节 C++的编译/链接模型
- 预处理
- 编译
- 链接
- 第2章
- 第1节 HelloWorld
- 第2节 系统IO
- 输入输出流 iostream
- 命名空间 namespace
- 第3节 猜数字与控制流
- 第4节 结构体与自定义数据类型
第1章
第2节 C++开发环境与相关工具
C++开发工具:
/usr/bin/time
+运行程序 打印花费的时间和CPU占用率等(Linux)- valgrind
- cppreference.com 网站(C++百科全书)
- Complier Explorer 网站(选择编译器、查看程序对应的汇编)
- C++ insights 网站 代码等价变换 便于程序理解
- Youtube cppcon会议
第3节 C++的编译/链接模型
分块处理:
衍生出的概念:
定义/声明: 多个文件使用同一变量,在一处定义,其他文件声明,声明处编译时不查找变量,链接时去查找变量建立链接
头文件/源文件:多个文件需要使用同一个变量时,将声明放在一个头文件中,其他源文件引用头文件,编译时会展开头文件,提升写代码的效率
翻译单元
- 源文件 + 相关头文件 (直接/间接)- 应忽略的预处理语句 (每个编译器处理的就为一个翻译单元)
一处定义原则:同一变量、对象、函数等只有一处定义
- 程序级:一般函数
- 翻译单元级:内连函数、类、模板
预处理
- 将源文件转换为翻译单元
- 防止头文件被***循环展开***(多个头文件互相嵌套,导致头文件一直循环展开)
#ifdef
解决 (可能有名字冲突)#pragma once
解决 (只处理一次)
编译
将翻译的那远转换为相应的汇编语言表示
编译***优化***
- https://godbolt.org/z/zh9aqx (优化后不能打断点分步调试,但是能提升程序的性能,通常编译分为Debug版本和Release版本,调试结束后使用Release版本重新编译以提升程序性能)
增量编译 V.S. 全部编译
链接
- 合并多个目标文件,关联声明和定义
- 连接(Linkage)种类:内部链接、外部链接
- 链接常见错误:找不到定义
第2章
第1节 HelloWorld
获取main函数的返回值语句:echo $?
C++如果没有return值,规定默认返回0。
main只有两种形式:
int main()
int main(int argc,char* argv[])
第2节 系统IO
#include "文件名"
从***当前文件目录***开始寻找,若找不到再从系统目录开始寻找
#include <文件名>
从系统目录开始寻找
(若不确定则使用双引号)
若自己编写头文件加.h后缀,C++标准库没有后缀
输入输出流 iostream
输出流: cout cerr clog
cout
和cerr
在终端打印出显示相同,可以输出定向到不同的文件当中
例如:
./HelloWorld >txt1 2>txt2 //输出到不同的文件
cat ./txt1 //查看不同的文件
cat ./txt2
输出流区别:1.输出目标;2是否立即刷新缓冲区
cerr
错误信息,立即刷新缓冲区
clog
日志信息,不立即刷新缓冲区
刷新缓冲区:std::flush
std::endl
(刷新缓冲区并且换行)
命名空间 namespace
目的:防止不同人写的多段代码有命名冲突
//定义:
namespace NameSpace1{void fun(){}
}
//调用1:
NameSpace1::fun();
//调用2:
using namespace NameSpace1;
//调用3:
namespace ns1 = NameSpace1;
ns1::fun();
不推荐在函数外部使用using namespace
,不应在头文件中使用using namespace
,因为所有引用头文件的源文件都有命名冲突的风险
std
标准名字空间
编译得到的.o文件,通过nm + 文件名
命令查看所有外部链接
nm ./main.o
命名空间和名称改编:name mangling
nm ./main.o | c++filt -t
程序中只有一个main函数,所以只有main函数命名改编
使用printf
等C语言输入输出函数时要#include <cstdio>
printf
使用比较直观,但是需要对应不同数据类型要对应不同的占位符。
cout
使用简单不需要占位符,能够自动匹配输出类型。
第3节 猜数字与控制流
const int x = 42;
定义x为常量,不能被改变值
第4节 结构体与自定义数据类型
将相关数据放在一起,通过.来访问元素
定义结构体 struct + 名字
通过.
操作符访问结构体内部元素
引入成员函数,更好表示函数与数据的相关性
C++基础学习笔记:第一章、第二章相关推荐
- 日语课程0基础学习笔记——第一课
学习目标: 编程0基础学习笔记--前言 这是一个个人使用的日语学习记录博客!根据B站的up日语教程一直跟下来,从第一天开始记录.后续会把我学习的内容和知识点尽量多的记录在这个博客中,不仅是方便自己复习 ...
- 《信息安全工程师教程》学习笔记02(第二章 密码学基础与应用—DES算法)
第二章 密码学基础与应用 2.1 密码学的基本概念 1949年香农发表了<保密系统的通信理论> 1976年W.Diffie和M.Hellman提出公开密钥密码 1977年美国联邦政府颁布数 ...
- python从入门到实践学习笔记_Python编程从入门到实践:学习笔记1(第二章)
开通博客我用的理由是:读书学习时记笔记,一方面为了回顾,一方面为了督促自己.fighting! 学习Python,我买了Python编程从入门到实践. 我将从第二章开始记录我认为我以后会忘记以及重要的 ...
- 西瓜书学习笔记——第一、二章
目录 一.第一章 绪论 1.重要基本术语 1.1 分类与回归 1.2 聚类 1.3 监督学习和无监督学习 1.4 泛化 1.5 归纳偏好 二.第二章 模型评估与选择 1.评估方法 1.1 留出法 2. ...
- 【学习笔记】计算机网络 第二章 物理层
以下内容为参考课件和<计算机网络>(第7版,谢希仁编著)的个人整理,若有错误欢迎指出 第二章 物理层 文章目录 第二章 物理层 一.物理层的基本概念 1.主要任务 2.四个特性 二.数据通 ...
- 软考网络管理员学习笔记2之第二章数据通信基础
第二章.数据通信基础 1.奈奎斯特定理与香农理论 [考法分析] 奈奎斯特定理是理想情况下,求数据速率 香农理论是在受到噪声干扰后,求数据速率 [要点分析] 看题目中是否提及到噪声或信噪比等关键词 如果 ...
- SpringBoot学习笔记-2:第二章 Spring Boot 配置
第二章 Spring Boot 配置 1.YAML 配置 SpringBoot 全局配置文件 application.properties application.yml YAML 以数据为中心,比 ...
- css层叠样式表基础学习笔记--第一章 css简介及引入
第一章 css简介及引入 1-01 css简介 1-02 css优缺点 1-03 css书写格式 1-04 css引入格式 行内样式 内部样式 外部样式 导入样式 1-05 css注释 1-01 cs ...
- css层叠样式表基础学习笔记--第十二章 我要自学网首页实战
第十二章 我要自学网首页实战 12-01 页面分析 12-02 工作准备 12-03 搜索区块页面结构 12-04 导航条布局 12-05 幻灯片布局 12-06 公告栏布局 12-07 远程培训班布 ...
- 《编译原理》学习笔记 ·003【第二章:文法和语言(形式语言理论)-2】
注:前言.目录见 https://blog.csdn.net/qq_44220418/article/details/108428971 文章目录 三.文法和语言的分类 1.Chomsky语言分类法 ...
最新文章
- java 穷举 排列组合,JavaScript递归穷举所有排列组合并找出重复值
- 查看linux上redis的运行状态,Redis教程(七)使用info查看服务状态
- 杭电1728bfs逃离迷宫java实现
- java8升级java11到底敢不敢?
- 牛客多校3 - Operating on a Graph(并查集+链表合并)
- c#日期转换周几_RPA经验:使用 selector 选择日期
- 回归即登顶社交应用排行榜,多牛传媒开启人人“第二春”
- 如何估算网站日承受最大访问PV
- [转]C++日志系统log4cxx使用总结
- 【知识图谱系列】自适应深度和广度图神经网络模型
- 《神经网络与深度学习》邱锡鹏编程练习_第一章numpy_tutorial答案分享
- 计算机网络试卷北理珠,北理工97级计算机网络终考试卷
- ibatis iterator list 参数 查询
- 计算机型号win7,win7cpu型号怎么看
- 钉钉安装需要管理员权限报错解决办法
- php radio是什么意思,radio是什么意思_radio在线翻译_英语_读音_用法_例句_海词词典...
- 神经网络的权重初始化,神经网络的权值和阈值
- 代码传奇 | 搞罢餐的热血青年到 PHP大神的蜕变——“鸟哥”惠新宸
- Java随笔记 - Java BIO,Socket通信
- Excel高级功能 数据工具