当前位置:网站首页>C陷阱与缺陷 第8章 建议与答案 8.1 建议
C陷阱与缺陷 第8章 建议与答案 8.1 建议
2022-08-01 21:00:00 【weixin_客子光阴】
C语言是一个强大灵活的工具。
我们怎样才能避免C语言中的这些问题呢?
最重要的规避技巧是,知道自己在做什么。
大多数错误都出现在制作者在上床睡觉之前做的最后意见工作上。所以,在准备
最后做一点什么之前,你还是早点休息吧。
在实际组合程序之前想清楚应该如何组合,对得到一个可靠的结果至关重要。
建议:
不要说服自己相信“皇帝的新装”。
while (c == '\t' || c = ' ' || c == '\n')
c = getc(f);
C语言中这是非法的。
相当于下面的代码:
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);
考察最简单的特例。
适用于程序的设计,构思程序的工作方式,测试程序的工作情况。
使用不对称边界。
注意潜伏在暗处的Bug。
坚持只使用C语言中众所周知的部分。
防御性编程
对程序用户和编译器事先的假设不要过多。
再怎么不可能发生的事情,在某些时候还是有可能发生的。要实现一个健壮的程序,就应该预先
考虑到这种异常情况。
一个C编译器要想严格检测程序中的各种错误,就要对程序中本意是可移植的部分进行严格检测,同时对程序中那些用来完成与特定机器相关的部分网开一面。
另一个原因,某些类型的错误从本质上说是难于检测的。
void set(int *p, int n) {
*p = n;
}
需要上下文来说明程序是否合法。
//2.
//legal
int a[10];
set(a + 5, 37);
//illegal
int a[10];
set(a + 10, 37);
ANSI C标准允许程序得到数组尾端出界的第一个位置的地址。
边栏推荐
- 【Dart】dart之mixin探究
- Fork/Join线程池
- 人工智能可信安全与评测
- Get started quickly with MongoDB
- 数据库内核面试中我不会的问题(1)
- [Energy Conservation Institute] Comparative analysis of smart small busbar and column head cabinet solutions in data room
- MySQL 中出现的字符编码错误 Incorrect string value: ‘\x\x\x\x‘ for column ‘x‘
- SIPp installation and use
- 数据库单字段存储多个标签(位移操作)
- 乐观锁批量跟新 纯SQL
猜你喜欢
![漏洞分析丨HEVD-0x6.UninitializedStackVariable[win7x86]](/img/37/09ab9b5a490c6ab9bc7991ecc4c8f4.png)
漏洞分析丨HEVD-0x6.UninitializedStackVariable[win7x86]

STAHL touch screen repair all-in-one display screen ET-316-TX-TFT common faults

外骨骼机器人(七):标准步态数据库

响应式织梦模板美容整形类网站

R语言 数据的关系探索

人工智能可信安全与评测

面试突击70:什么是粘包和半包?怎么解决?
![[Multi-task model] Progressive Layered Extraction: A Novel Multi-Task Learning Model for Personalized (RecSys'20)](/img/7d/f8f150ad13f4cacc143491fcd8420b.png)
[Multi-task model] Progressive Layered Extraction: A Novel Multi-Task Learning Model for Personalized (RecSys'20)

MySQL Syntax Basics

Questions I don't know in database kernel interview(1)
随机推荐
Different operating with different locks, rounding
Go Atomic
Pytorch学习记录(八):生成对抗网络GAN
15 分钟带你入门 Grafana
LinkedList source code sharing
徒步,治好了我的精神内耗
JS提升:如何中断Promise的链式调用
响应式织梦模板美容整形类网站
Protocol Buffer 使用
Pytorch框架学习记录10——线性层
【Kaggle】House Prices
win10版本1803无法升级1903系统如何解决
密码学的基础:X.690和对应的BER CER DER编码
Imitation cattle forum project
Failed to re-init queues : Illegal queue capacity setting (abs-capacity=0.6) > (abs-maximum-capacity
】 【 nn. The Parameter () to generate and why do you want to initialize
Convolutional Neural Network (CNN) mnist Digit Recognition - Tensorflow
Hiking, cured my mental internal friction
Which websites are commonly used for patent searches?
StringTable Detailed String Pool Performance Tuning String Concatenation