[C陷阱和缺陷] 第4章 连接】的更多相关文章

一个C程序可能是由多个分别编译的部分组成,这些不同部分通过连接器合并成一个整体.在本章中,我们将考查一个典型的连接器,注意它是如何对C程序进行处理的,从而归纳出一些由于连接器的特点而可能导致的错误. 4.1 什么是连接器     在C语言中,一个重要的思想就是分别编译,即若干个源程序可以在不同的时候单独进行编译,然后通过连接器整合到一起.但是连接器一般是与C编译器分离的,连接器如何做到把若干个C源程序合并成一个整体呢? 尽管连接器并不理解C语言,但它理解机器语言和内存布局.只要编译器将C源程序"…
有感自己的C语言在有些地方存在误区,所以重新仔细把"C陷阱和缺陷"翻出来看看,并写下这篇博客,用于读书总结以及日后方便自身复习. 第1章 词法"陷阱" 1.1 =不同与==   = 是赋值操作符,而 == 是作为比较操作符,初学者容易将 == 错写为 = ,这种情况下编译器不会报错,这就有可能造成很严重的后果,还不容易发现.比如下面这个例子: while( c=' ' || c=='\t' || c=='\n' ) { ; }   即使c既不等于'\t',也不等于'…
第3章 语义"陷阱"     一个句子哪怕其中的每个单词都拼写正确,而且语法也无懈可击,仍然可能有歧义或者并非书写者希望表达的意思.程序也有可能表面上是一个意思,而实际上的意思却相去甚远,本章考查了若干种可能引起上述歧义的程序书写方式. 3.1 指针与数组     C语言中指针与数组这两个概念之间的联系是如此密不可分,以至于如果不能理解其中一个概念,就不可能理解另一个概念.而且,C语言对这些概念的处理, 在某些方面与其它任何为人熟知的程序语言都不同.   C语言的数组值得注意的地方有以…
第2章 语法陷阱 2.1 理解函数声明   当计算机启动时,硬件将调用首地址为0位置的子例程,为了模拟开机时的情形,必须设计出一个C语言,以显示调用该子例程,经过一段时间的思考,得出语句如下: ( *(void(*) () )0 ) ();   像这样的表达式看起来很难理解,但只要将其一层一层地剥离,还是能够理解的.下面我将用几个例子来帮助大家逐渐理解这个表达式. void *a(); void (*b) ();   因为()的优先级高于,所以a()为(a()),a是一个函数,该函数的返回类型为…
  C语言在许多不同的系统平台上都有实现.的确,使用C语言编写程序的一个首要原因就是,C程序能够方便地在不同的编程环境中移植.   不同的系统有不同的需求,因此我们应该能够预料到,机器不同则其上的C语言实现也由细微差别.今天,一个C程序员如果希望自己写的程序在另一个编程环境也能够工作,他就必须掌握许多这类细小的差别.本章要讨论的是关于可移植性的几个最常见的错误来源,重点放在语言的属性上,而不是在函数库的属性上.   7.1 标识符名称的限制   某些C语言实现把一个标识符中出现的所有字符都作为有…
  在严格意义上的编译过程开始之前,C语言预处理器首先对程序代码作了必要的转换处理.因此,我们运行的程序实际上并不是我们所写的程序.预处理器使得编程者可以简化某些工作,它的重要性可以由两个主要的原因说明:   第一个原因是,我们也许会遇到这样的情况,需要将多个在程序中出现的所有实例统统加以修改.我们希望在程序中只改动一处数值,然后重新编译就可以实现.预处理器要做到这一点可以说是轻而易举(使用宏定义即可: #define N 1024).而且,预处理器还能够很容易地把所有常量定义都集中在一起,这样…
  有关库函数的使用,我们能给出的最好建议是尽量使用系统头文件,当然也可以自己造轮子,随个人喜好.本章将探讨某些常用的库函数,以及编程者在使用它们的过程中可能出错之处.   5.1 返回整数的getchar函数   我们首先考虑下面的例子: #include<stdio.h> int main() { char c; while( ( (c = getchar()) != EOF ) ) putchar(c); return 0; }   上面代码在某些情况下可能出错,原因在于变量 c 被声明…
第一章 词法“陷阱” 1. =不同于== if(x = y) break; 实际上是将y赋给x,再检查x是否为0. 如果真的是这样预期,那么应该改为: if((x = y) != 0) break; 2. &和| 不同于 && 和 ||   3.词法分析中的“贪心法” 编译器将程序分解成符号的方法是:从左到有一个一个字符的读入,如果该字符可能组成一个符号,那么再读入下一个字符,判断已经读入的两个字符组成的字符床是否可能是一个符号的组成部分:如果可能,继续读入下一个字符,重复上述判断…
版权声明:本文为Focustc原创文章.转载请注明作者及出处. https://blog.csdn.net/caozhankui/article/details/35925939 看完<C陷阱与缺陷>,忍不住要又一次翻一下,记录一下与自己的惯性思维不符合的地方. 记录的是知识的增量.是这几天的流量,而不是存量. 这本书是在ASCI C/C89订制之前写的.有些地方有疏漏. 第一章 词法陷阱 1.3 C语言中解析符号时使用贪心策略,如x+++++y将被解析为x++ ++ +y.并编译出错. 1.…
下载地址:点我 凯尼格 (作者), 高巍 (译者) <C和C++经典著作:C陷阱与缺陷>适合有一定经验的C程序员阅读学习,即便你是C编程高手,<C和C++经典著作:C陷阱与缺陷>也应该成为你的案头必 备书籍.作者以自己1985年在Bell实验室时发表的一篇论文为基础,结合自己的工作经验扩展成为这本对C程序员具有珍贵价值的经典著作.写作<C和C++经典著作:C陷阱与缺陷>的出发点不是要批判C语言,而是要帮助C程序员绕过编程过程中的陷阱和障碍.<C和C++经典著作:C…