《C陷阱与缺陷》读书笔记

本文是《C陷阱与缺陷》的读书笔记,涵盖了连接、库函数、预处理器等方面的问题。强调了外部变量引用、命名冲突、类型匹配等常见陷阱,并给出了解决方案。例如,extern int a 是引用而非定义,多个同名函数应避免命名冲突,使用long类型处理大文件,以及宏定义和预处理器的注意事项。同时,探讨了库函数的使用细节,如printf的浮点格式处理,以及输入输出的潜在问题。最后,提到了编程建议,包括明确表达意图、避免使用复杂特性等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

**第一章:词法‘陷阱’**
    1.1  
=为赋值操作,==是比较,容易将=与==弄混而出现错误。
    1.2  
&和|为位运算符,&&和||为逻辑运算符。
    1.3  
贪心法:如果(编译器的)输入流截止至某个字符之前都已经被分解为一个个符号,那么下一个符号将包括从该字符之后可能组成一个符号的最长字符串。
    y=x/*p 实际等于 y=x      因为/*将后面当成了注释。
    应该写成y=x/(*p)


 **第二章:语法‘陷阱’**
    2.1 
 (*(void(*)())0)() 的意思是调用(void(*)())0所指向的函数,而后者的意义是将常数0转型为“指向返回值为void函数的指针”。
    signal函数:void(*signal(int,void(*)(int)))(int);
    2.2 
C语言运算符优先级表格。


**第三章:语义‘陷阱’**
    3.1 
int calendar[12][31]:
    calendar是一个数组,该数组拥有12个数组类型的元素,其中每个元素都是一个拥有31个int类型元素的数组。
    calendar[n]表示calendar中第n+1个拥有31个int类型元素的数组首个元素的地址。
    3.2
 将字符串s、t连接成单个字符串r:
    char *r,*mallic();
    r=malloc(strlen(s)+strlen(t)+1);  //+1为加字符‘\0’
    if(!r){                                               //判断*r所指空间是否为空
            complain();
            exit(1);
    }
    strcpy(r,s);
    strcat(r,t);
    free(r);          &nb
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值