Skip to content

Commit

Permalink
chapter2: add links to reference books
Browse files Browse the repository at this point in the history
  • Loading branch information
jserv committed Sep 8, 2015
1 parent bd27cdb commit 2cd58d6
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions zh/chapters/02-chapter2.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@

平时在 Linux 下写代码,直接用 `gcc -o out in.c` 就把代码编译好了,但是这背后到底做了什么呢?

如果学习过《编译原理》则不难理解,一般高级语言程序编译的过程莫过于:预处理、编译、汇编、链接。
如果学习过《[编译原理](https://en.wikipedia.org/wiki/Compilers:_Principles,_Techniques,_and_Tools)》则不难理解,一般高级语言程序编译的过程莫过于:预处理、编译、汇编、链接。

`gcc` 在后台实际上也经历了这几个过程,可以通过 `-v` 参数查看它的编译细节,如果想看某个具体的编译过程,则可以分别使用 `-E``-S``-c``-O`,对应的后台工具则分别为 `cpp``cc1``as``ld`

Expand All @@ -51,7 +51,7 @@

以前没怎么“深入”预处理,脑子对这些东西总是很模糊,只记得在编译的基本过程(词法分析、语法分析)之前还需要对源代码中的宏定义、文件包含、条件编译等命令进行处理。这三类的指令很常见,主要有 `#define``#include``#ifdef ... #endif`,要特别地注意它们的用法。

`#define` 除了可以独立使用以便灵活设置一些参数外,还常常和 `#ifdef ... #endif` 结合使用,以便灵活地控制代码块的编译与否,也可以用来避免同一个头文件的多次包含。关于 `#include` 貌似比较简单,通过 `man` 找到某个函数的头文件,复制进去,加上 `<>` 就好。这里虽然只关心一些技巧,不过预处理还是隐藏着很多潜在的陷阱(可参考《C Traps & Pitfalls》)也是需要注意的。下面仅介绍和预处理相关的几个简单内容。
`#define` 除了可以独立使用以便灵活设置一些参数外,还常常和 `#ifdef ... #endif` 结合使用,以便灵活地控制代码块的编译与否,也可以用来避免同一个头文件的多次包含。关于 `#include` 貌似比较简单,通过 `man` 找到某个函数的头文件,复制进去,加上 `<>` 就好。这里虽然只关心一些技巧,不过预处理还是隐藏着很多潜在的陷阱(可参考《[C Traps & Pitfalls](https://en.wikipedia.org/wiki/C_Traps_and_Pitfalls)》)也是需要注意的。下面仅介绍和预处理相关的几个简单内容。

<span id="toc_27212_14734_4"></span>
### 打印出预处理之后的结果
Expand Down Expand Up @@ -121,7 +121,7 @@ hello.c: In function ‘main’:
hello.c:5: error: ISO C90 forbids mixed declarations and code
```

语法错误是程序开发过程中难以避免的错误(人的大脑在很多情况下都容易开小差),不过编译器往往能够通过语法检查快速发现这些错误,并准确地告知语法错误的大概位置。因此,作为开发人员,要做的事情不是“恐慌”(不知所措),而是认真阅读编译器的提示,根据平时积累的经验(最好总结一份常见语法错误索引,很多资料都提供了常见语法错误列表,如《C Traps&Pitfalls》和编辑器提供的语法检查功能(语法加亮、括号匹配提示等)快速定位语法出错的位置并进行修改。
语法错误是程序开发过程中难以避免的错误(人的大脑在很多情况下都容易开小差),不过编译器往往能够通过语法检查快速发现这些错误,并准确地告知语法错误的大概位置。因此,作为开发人员,要做的事情不是“恐慌”(不知所措),而是认真阅读编译器的提示,根据平时积累的经验(最好总结一份常见语法错误索引,很多资料都提供了常见语法错误列表,如《[C Traps & Pitfalls](https://en.wikipedia.org/wiki/C_Traps_and_Pitfalls)》和编辑器提供的语法检查功能(语法加亮、括号匹配提示等)快速定位语法出错的位置并进行修改。

<span id="toc_27212_14734_9"></span>
### 编译器优化
Expand Down

0 comments on commit 2cd58d6

Please sign in to comment.