C陷阱与缺陷-疑难问题理解01

概述

​ 课程“C陷阱与缺陷-疑难问题理解”是笔者在学习《C陷阱与缺陷》这本书时的读书记录,进行二次创作而成。通过“讲义+视频”方式帮助大家在短时间内学习《 C陷阱与缺陷》这本书,进而提升对C语言的理解。同时也是对自己学习成果的巩固。讲义和视频免费获取并且全部开源。

​ 不知道你有没有这种感觉!总是觉得自己对C语言基本的语法和使用很了解,但是涉及到C语言的高级用法有总是感觉似懂非懂。另外通过视频方式自学C语言知识也感觉不完整,如果没有看书像是缺了点什么!认为看书才算是系统的学习。

​ 通过在网上查找资料了解到《C陷阱与缺陷》这本书。深入研读这本书对自己启发很大。因此制作了《C陷阱与缺陷-关于C语言疑难问题理解》这本讲义并录制了配套的视频课程。通过学习该课程你可以不用花太多的时间去啃《C陷阱与缺陷》这本书。而是像大学时期“老师画重点”一样学习到《C陷阱与缺陷》这本书的全部精华。

​ 学习课程“C陷阱与缺陷-关于C语言疑难问题理解”需要你有一定的C语言功底,适合一切想深入了解C语言的编程爱好者和开发者。网上很多人推荐《C陷阱与缺陷》这本书,可笑的是他们自己却没有看过。所以我想我已经花了这么多时间研究了这本书,为什么不做个教程帮助大家了解《C陷阱与缺陷》这本书呢,因此就诞生了《C陷阱与缺陷-关于C语言疑难问题理解》这本讲义及配套视频课程。

课程计划

​ 通过12个课时,每节课大约20-30分钟,具体安排如下:

概述-------------------------------------------------1课时

第一章 词法“陷阱”---------------------------------1课时

第二章 语法“陷阱”---------------------------------2课时

第三章 语义“陷阱”---------------------------------3课时

第四章 连接----------------------------------------1课时

第五章 库函数--------------------------------------1课时

第六章 预处理器-----------------------------------1课时

第七章 可移植性缺陷------------------------------2课时

精彩抢先看

如下例子:

while (c == '\t' || c = ' '|| c == '\n')
		c = getc(f);

如上,这个例子在C语言中是非法的。因为赋值运算符=的优先级比while 子句中其他运算符的优先级都要低,因此上例可以这样解释:

while ((c == '\t' || c) = (' '|| c == '\n'))
		c = getc(f);

当然,这是非法的:

(c == '\t' || c)

​ 有时候我们还应该预料哪些错误有可能出现,在代码的编写方式上做到事先预防,一旦错误真正发生能够马上捕获。例如,有的程序员把常量放在判断相等的比较表达式的左侧。换言之,不是按照习惯的写法:

while (c == '\t' || c == ' '|| c == '\n')
		c = getc(f);

而是写作:

while ('\t' == c || ' ' == c || '\n' == c)
		c = getc(f);

这样,如果程序员不小心把比较运算符==写成了赋值运算符=,编译器将会捕获到这种错误,并给出一条编译器诊断信息:

while ('\t' = c || ' ' == c || '\n' == c)
		c = getc(f);

上面的代码试图给字符常量’\t’赋值,因而是非法的。

如果像下面的代码一样调用这个函数:

int a[10];
set(a+5, 37);

这当然是合法的,但如果这样来调用set函数:

int a[10];
set(a+10, 37);

上面的代码就是非法的了。ANSI C标准允许程序得到数组尾端出界的第一个位置的地址,因此上面的后一个代码段从它本身来说并没有什么错误。C编译器要想捕获到这样的错误,就必须非常地“聪明”。

你可能感兴趣的:(C陷阱与缺陷-疑难问题理解,c语言)