《C专家编程》读书笔记

本文是《C专家编程》的读书笔记,探讨了C语言的特性,如多做、误做、少做的场景,强调了声明的结构和typedef的使用。还详细介绍了编译与链接的过程,特别是函数库链接的静态与动态方式。接着,文章深入讲解了数组与指针的关系,以及内存模型和运行时数据结构,包括内存泄漏和总线错误。最后,讨论了原型与类型,包括类型提升和函数原型的重要性,并给出了用C语言实现有限状态机的实际应用示例。
摘要由CSDN通过智能技术生成

一、C的语言特性

   1. 多做

         1)switch语句,switch语句不会在每个case执行完毕后自动终止(称为fall through),这也是每个case语句最后加上break的原因;break语句跳出的是最近的循环语句或switch语句;

         2)相邻字符串自动连接,尤其在字符指针数组的初始化中,少了逗号会使两个字符串拼接在一起;

         3)缺省全局范围,当我们自己定义一个与库函数同名的函数时,会取而代之,不管在自己调用还是系统调用时,具体见“三、连接与链接”;

   2. 误做

        1)C 语言的简洁性 ,C关键字在多种上下文中使用,即符号重载,如static、&、()、void等

        2)运算符的优先级,优先级存在的问题:

           a. .的优先级大于*,->操作符用于消除这个问题;

           b. []的优先级高于*;

           c. 函数()高于*;

           d. ==和!=高于位操作符和赋值符;

           e. 算术运算高于移位运算;

           f. 逗号运算符在所有运算符中优先级最低;

         3)gets()函数接收任意长的参数会改写函数栈,超过的长度会污染别的栈帧(函数调用时的内存分配过程,以后详细看CSAPP);

   3. 少做

         1)命令行参数解析,选项开关"-"与文件名中的“-”混淆;

         2)空格引发的血案

             a. 多了空格,行末最后一个字符“\”后跟上换行符标识下一行为本行的后续,警惕“\”和换行符之间的空格

             b. 少了空格,造成歧义,例如z=y+++x,将被解析为 z= y++ + x;

             c. ratio = *x/*y,错误地编写了一个注释符号,语法器(?)报错;

         3)函数返回指向局部变量的指针,(C语言中自动变量在堆栈中分配内存,生命周期结束时回收);

             a. 返回一个指向字符串常量的指针;

             b. 使用全局声明的数组;

             c. 使用静态数组;(静态变量在静态数据区分配内存,深入看内存空间模型);

             d. 显示分配一些内存,保存返回的值;(感觉最常用到,每次调用都创建一个缓冲区,但需要记得释放,否则会导致内存泄漏);

              e. lint程序(?);

二、C语言的声明

   1、声明的结构

        1)声明器:零个或多个(指针)+ 有且只有一个(直接声明器) + 零个或一个(初始化内容);

        2)声明:至少一个(类型说明符) + 有且只有一个(声明器)+ 零个或多个(,+更多的声明器ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值