Skip to content

Commit

Permalink
typo
Browse files Browse the repository at this point in the history
  • Loading branch information
wizardforcel committed Aug 1, 2016
1 parent a616086 commit d0de5c7
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 6 deletions.
2 changes: 1 addition & 1 deletion ex17.md
Expand Up @@ -225,7 +225,7 @@ int main(int argc, char *argv[])
用于错误报告的 `errno`和`perror`
当函数返回了一个错误时,它通常设置一个叫做`errno`的“外部”变量,来描述发生了什么错误。它们知识数字,所以你可以使用`peeror`来“打印出错误信息”。
当函数返回了一个错误时,它通常设置一个叫做`errno`的“外部”变量,来描述发生了什么错误。它们只是数字,所以你可以使用`perror`来“打印出错误信息”。
文件函数
Expand Down
10 changes: 5 additions & 5 deletions ex20.md
Expand Up @@ -10,7 +10,7 @@

## C的错误处理问题

几乎每个编程语言中,错误处理都非常难。有些语言尽可能试图避免错误这个概念,而另一些语言发明了复杂了控制结构,比如异常来传递错误状态。当然的错误大多是因为程序员嘉定错误不会发生,并且这一乐观的思想影响了他们所用和所创造的语言。
几乎每个编程语言中,错误处理都非常难。有些语言尽可能试图避免错误这个概念,而另一些语言发明了复杂了控制结构,比如异常来传递错误状态。当然的错误大多是因为程序员假定错误不会发生,并且这一乐观的思想影响了他们所用和所创造的语言。

C通过返回错误码或设置全局的`errno`值来解决这些问题,并且你需要检查这些值。这种机制可以检查现存的复杂代码中,你执行的东西是否发生错误。当你编写更多的C代码时,你应该按照下列模式:

Expand Down Expand Up @@ -90,7 +90,7 @@ dbg.h:10

dbg.h:11

用于替代的`#define debug`,它将任何使用`debug("format", arg1, arg2)`的地方替换成`fprintf``stderr`的调用。许多程序员并不知道,但是你的确可以创建列斯与`printf`的可变参数宏。许多C编译器(实际上是C预处理器)并不支持它,但是gcc可以做到。这里的魔法是使用`##__VA_ARGS__`,意思是将剩余的所有额外参数放到这里。同时也要注意,使用了`__FILE__``__LINE__`来获取当前`fine:line`用于调试信息。这会非常有帮助。
用于替代的`#define debug`,它将任何使用`debug("format", arg1, arg2)`的地方替换成`fprintf``stderr`的调用。许多程序员并不知道,但是你的确可以创建与`printf`类似的可变参数宏。许多C编译器(实际上是C预处理器)并不支持它,但是gcc可以做到。这里的魔法是使用`##__VA_ARGS__`,意思是将剩余的所有额外参数放到这里。同时也要注意,使用了`__FILE__``__LINE__`来获取当前`fine:line`用于调试信息。这会非常有帮助。

dbg.h:12

Expand Down Expand Up @@ -122,7 +122,7 @@ dbg.h:28

## 使用dbg.h

下面是一个例子,在一个小的程序中使用了`dbg.h`的所有函数。这实际上并没有做什么事情,知识想你演示了如何使用每个宏。我们将在接下来的所有程序中使用这些宏,所有要确保理解了如何使用它们。
下面是一个例子,在一个小的程序中使用了`dbg.h`的所有函数。这实际上并没有做什么事情,只是向你演示了如何使用每个宏。我们将在接下来的所有程序中使用这些宏,所有要确保理解了如何使用它们。

```c
#include "dbg.h"
Expand Down Expand Up @@ -268,9 +268,9 @@ $ ./ex20 test

看到`check`失败之后,它是如何打印具体的行号了吗?这会为接下来的调试工作节省时间。同时也观察`errno`被设置时它如何打印错误信息。同样,这也可以节省你调试的时间。

## C预处理器如果扩展宏
## C预处理器如何扩展宏

现在我会想你简单介绍一些预处理器的工作原理,让你知道这些宏是如何工作的。我会拆分`dbg.h`中阿最复杂的宏并且让你运行`cpp`来让你观察它实际上是如何工作的。
现在我会向你简单介绍一些预处理器的工作原理,让你知道这些宏是如何工作的。我会拆分`dbg.h`中阿最复杂的宏并且让你运行`cpp`来让你观察它实际上是如何工作的。

假设我有一个函数叫做`dosomething()`,执行成功是返回0,发生错误时返回-1。每次我调用`dosomething`的时候,我都要检查错误码,所以我将代码写成这样:

Expand Down

0 comments on commit d0de5c7

Please sign in to comment.