Skip to content

Commit

Permalink
Merge pull request #26 from ganchuanman/main
Browse files Browse the repository at this point in the history
一些拼写错误修复以及补充翻译3.6小节
  • Loading branch information
hanxiaomax authored Dec 2, 2024
2 parents aad426a + 7a55c99 commit 793436a
Show file tree
Hide file tree
Showing 8 changed files with 100 additions and 87 deletions.
2 changes: 1 addition & 1 deletion docs/2-10-Introduction-to-the-preprocessor.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ tags:

在预处理器工作的时候,它会从头到尾扫描代码文件,查找[[preprocessor-directive|预处理器指令 (preprocessor directive)]]。预处理器指令(经常简称为指令)是一些以`#`开头,以换行(而非分号)结尾的符号。这些指令会告诉预处理器应该对文本执行哪些特定的操作。<mark class="hltr-red">需要注意的是,预处理器并不理解C++的语法——相反,预处理器指令有其自己的语法(有些和C++语法类似,有些则不然)。</mark>

预处理器的输出会经历一些列翻译阶段,然后才会被编译。需要注意的是,预处理器并不会修改原文件——所有经预处理器修改产生的变化都是临时的(用于一次编译)
预处理器的输出会经历一系列翻译阶段,然后才会被编译。需要注意的是,预处理器并不会修改原文件——所有经预处理器修改产生的变化都是临时的(用于一次编译)

本节课将介绍一些最为常见的预处理器指令。

Expand Down
2 changes: 1 addition & 1 deletion docs/2-11-Header-files.md
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ void something(int) // 错误: 错误的返回类型
你可能会好奇,为什么 `iostream` 使用的是尖括号,而 `add.h`就需要使用双引号。这是因为,同名的文件可能会分布在不同的目录中。区分使用尖括号和双引用,可以告诉编译器到哪里寻找头文件。
当使用尖括号的时候,其实是在告诉预处理器对应的头文件并不是我们编写的。编译器只会在 `include directories` 指定的目录中搜索。`include directories`是项目、IDE或编译器配置的一部分,默认的路径是由编译器或操作系统提供的。编译器并不会在你的项目目录中搜索对饮的头文件
当使用尖括号的时候,其实是在告诉预处理器对应的头文件并不是我们编写的。编译器只会在 `include directories` 指定的目录中搜索。`include directories`是项目、IDE或编译器配置的一部分,默认的路径是由编译器或操作系统提供的。编译器并不会在你的项目目录中搜索对应的头文件
当使用双引号的时候,其实是在告诉预处理器头文件是我们自己编写的。编译器首先会搜索当前目录,如果找不到所需的头文件,则会在 `include directories` 中进行查找。
Expand Down
2 changes: 1 addition & 1 deletion docs/3-1-Syntax-and-semantic-errors.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ tags:
- Syntax
---

软件错误是普遍存在的。制造它们很容易,但要找到它们却很难。在本章中,我们将探讨C++程序问题定位与拍错的相关主题,包括学习如何使用集成调试器,它是IDE的一部分。
软件错误是普遍存在的。制造它们很容易,但要找到它们却很难。在本章中,我们将探讨C++程序问题定位与排除的相关主题,包括学习如何使用集成调试器,它是IDE的一部分。

尽管调试工具和技术并不是C++标准的一部分,但学会在所编写的程序中发现并删除错误是成为一名成功程序员极为重要的一部分。因此,我们将花一点时间讨论这些主题,以便随着你编写的程序变得更加复杂,你诊断和纠正问题的能力也会以匹配的速度提高。

Expand Down
169 changes: 92 additions & 77 deletions docs/3-6-Using-an-integrated-debugger-Stepping.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/4-1-Introduction-to-fundamental-data-types.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ C++ 具有很多内置的数据类型,称为基础数据类型,也经常被

!!! info "作者注"

大多数现代编程语言都包含基本的字符串类型(字符串指的是包含一系列字符的数据,通常用来表示文本)。在C++中,字符串并不属于基本类型(它属于复合类型)。但是因为字符串的使用方法很直接,而且也非常有用,因此在本章中我们也会介绍字符串类型([[4-17-an-introduction-to-std-string|4.13 - std::string 简介]])。
大多数现代编程语言都包含基本的字符串类型(字符串指的是包含一系列字符的数据,通常用来表示文本)。在C++中,字符串并不属于基本类型(它属于复合类型)。但是因为字符串的使用方法很直接,而且也非常有用,因此在本章中我们也会介绍字符串类型([[4-17-an-introduction-to-std-string|4.13 - std::string 简介]])。

## The `_t` suffix

Expand Down
4 changes: 2 additions & 2 deletions docs/4-3-Object-sizes-and-the-sizeof-operator.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ tags:
|1 | 1 | 0
|1 |1 | 1

概括来说,具有 n 个[[bit|位]]大小的对象(n为正整数)可以保存 $2^n$ 中不同的值(2的n次方,一般也写作`2^n`)。因此,对于一个8个比特的字节来说,大小位1字节的对象可以保存 $2^8$ (256)中可能的值。使用2个字节的对象可以保存 $2^{16}$ (65536)种不同的值!
概括来说,具有 n 个[[bit|位]]大小的对象(n为正整数)可以保存 $2^n$ 种不同的值(2的n次方,一般也写作`2^n`)。因此,对于一个8个比特的字节来说,大小位1字节的对象可以保存 $2^8$ (256)中可能的值。使用2个字节的对象可以保存 $2^{16}$ (65536)种不同的值!

因此,对象的大小决定了它能保存的不同值的上限——使用的内存越多,能够存放的不同值也就越多。我们会在后续的课程中对整型进行更详细地介绍。

Expand All @@ -68,7 +68,7 @@ tags:

## 基础数据类型的大小

接下来的问题很显然:不同数据类型究竟占用多少内存?。答案可能会令你吃惊,不同数据类型占用的内存和编译器以及(或)计算机体系结构有关。
接下来的问题很显然:不同数据类型究竟占用多少内存?。答案可能会令你吃惊,不同数据类型占用的内存和编译器以及(或)计算机体系结构有关。

C++ 只保证了每种基础数据类型最小的尺寸:

Expand Down
4 changes: 1 addition & 3 deletions docs/4-5-Unsigned-integers-and-why-to-avoid-them.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ tags:

## 无符号整型

在上节课 ([[4-4-Signed-integers|4.4 - 有符号整型]]) 中,我们介绍了有符号整型,这些征信可以保存正负整数和 0。
在上节课 ([[4-4-Signed-integers|4.4 - 有符号整型]]) 中,我们介绍了有符号整型,这些整型可以保存正负整数和 0。

C++ 还支持无符号整型。无符号整型只能表示非符整数。

Expand Down Expand Up @@ -61,8 +61,6 @@ unsigned long long ull;

## 无符号整型溢出

What happens if we try to store the number 280 (which requires 9 bits to represent) in a 1-byte (8-bit) unsigned integer? The answer is overflow.

如果我们尝试把 280 (需要 9 个位来表示)赋值给一个 8 位无符号整型会发生什么呢?答案是——溢出。

!!! info "作者注"
Expand Down
2 changes: 1 addition & 1 deletion docs/4-6-Fixed-width-integers-and-size_t.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ int main()

固定宽度整型通常来讲有两个缺陷。

首先,固定宽度整型不能保证在所有的体系结构中都被定义了。它只存在于, They only exist on systems where there are fundamental types matching their widths and following a certain binary representation.如果体系结构不支持固定宽度整型,则你的程序是无法编译的。不过,大多数的现代体系结构都以 8/16/32/64-位的变量为标准,因此除非你需要将程序移植到某个极其特殊的大型机或嵌入式系统上,否则一般没有问题。
首先,固定宽度整型不能保证在所有的体系结构中都被定义了。它们只存在于有基本类型匹配其固定宽度并遵循确定的二进制表示的系统中。如果体系结构不支持固定宽度整型,则你的程序是无法编译的。不过,大多数的现代体系结构都以 8/16/32/64-位的变量为标准,因此除非你需要将程序移植到某个极其特殊的大型机或嵌入式系统上,否则一般没有问题。

其次,如果你使用了固定宽度整型,它的性能相较于使用更宽的类型可能或稍差(在同样的体系结构下)。例如,如果你需要一个大小确定为 32 位的整型,你可能会使用 `std:: int32_t`,但是你的 CPU 可能在处理 64 位整形时更快。不过,即便 CPU 能够更快的处理某种给定的类型,也不一定意味着程序的运行速度更快——现代程序更多受限于内存使用而不是 CPU 处理速度。使用更大的内存足迹(memory footprint)带来的性能损失可能会超过 CPU 对其进行的加速。不经实际测试是很难进行对比的。

Expand Down

0 comments on commit 793436a

Please sign in to comment.