当前位置:网站首页>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标准允许程序得到数组尾端出界的第一个位置的地址。
边栏推荐
- Pytorch框架学习记录10——线性层
- [Personal work] Wireless network image transmission module
- 网红驼背矫正产品真的管用吗?如何预防驼背?医生说要这样做
- 1374. 生成每种字符都是奇数个的字符串 : 简单构造模拟题
- Interview assault 70: what is the glue bag and a bag?How to solve?
- Failed to re-init queues : Illegal queue capacity setting (abs-capacity=0.6) > (abs-maximum-capacity
- 98.嵌入式控制器EC实战 EC开发板开发完成
- Convolutional Neural Network (CNN) mnist Digit Recognition - Tensorflow
- kubernetes各名词缩写
- WeChat applet cloud development | personal blog applet
猜你喜欢
Pytorch框架学习记录8——最大池化的使用
宝塔搭建PESCMS-Ticket开源客服工单系统源码实测
[Energy Conservation Institute] Application of Intelligent Control Device in High Voltage Switchgear
Godaddy domain name resolution is slow and how to use DNSPod resolution to solve it
C专家编程 第1章 C:穿越时空的迷雾 1.4 K&R C
】 【 nn. The Parameter () to generate and why do you want to initialize
StringTable Detailed String Pool Performance Tuning String Concatenation
2022年秋招,软件测试开发最全面试攻略,吃透16个技术栈
微信小程序云开发|个人博客小程序
WeChat applet cloud development | personal blog applet
随机推荐
Hiking, cured my mental internal friction
OSG Notes: Set DO_NOT_COMPUTE_NEAR_FAR to manually calculate far and near planes
kubernetes各名词缩写
Where should I prepare for the PMP exam in September?
myid file is missing
记录第一次给开源项目提 PR
自定义指令,获取焦点
乐观锁批量跟新 纯SQL
Interpretation of the meaning of each dimension of two-dimensional, three-dimensional, and four-dimensional matrices
tiup mirror init
Go Atomic
Application of Acrel-5010 online monitoring system for key energy consumption unit energy consumption in Hunan Sanli Group
R语言进行相关的操作
用户身份标识与账号体系实践
Pytorch框架学习记录9——非线性激活
Based on FPGA in any number of bytes (single-byte or multibyte) serial port (UART) to send (including source engineering)
LTE time domain and frequency domain resources
【Kaggle】Classify Leaves
useful website
】 【 nn. The Parameter () to generate and why do you want to initialize