当前位置:网站首页>C专家编程 第1章 C:穿越时空的迷雾 1.4 K&R C
C专家编程 第1章 C:穿越时空的迷雾 1.4 K&R C
2022-08-01 21:00:00 【weixin_客子光阴】
/*时间:1978
*人物:Steve Johnson
*事件:编写了pcc这个可移植的C编译器
*影响:形成了一代C编译器的基础。
*/
/*C语言的演化之路如图1-2所示。
*1973-3(早期的C)--->1976-9(K&R C)--->1983-9(ANSI C)(1)
*--->1967(Simula 67)(2)
*1983(Ada)(3)
*(1)(2)(3)共同形成1985-9(C++)
*/
/*软件信条
*一个非比寻常的Bug
C语言从Algol-68中继承了一个特性,就是复合赋值符它允许对一个重复出现的操作只写一次而不是两次,并给代码生成器一个提示,即操作数寻址也可以这么紧凑复合赋值符最初的写法是先写赋值符,再写操作符B语言的词法分析器里面有个技巧,使实现=op比实现目前所使用的op=形式更简单些但这种形式会引起混淆,它很容易把
b=-3; //从b中减去3
和
b= -3; //把-3赋给b
搞混淆。
因此,这个特性被修改为目前所使用的这种形式。作为修改的一部分,代码格式器程序indent
也做了相应修改,用于确定复合赋值符的过时形式,并交换两者的位置,把它转换为对应的标准
形式。这是个非常糟糕的决定。
任何格式器都不应该修改程序中除空白之外的任何东西。令人不快的是,这种做法会引入一个Bug,就是几乎任何东西(只要不是变量),如果出现在赋值符后面,就会与赋值符交换位置。
*/
/*这个Bug可能会引起语法错误,如
*epsilon=.0001;
*会被交换成
*epsilon.=0001;
*这条语句无法通过编译器,你马上就能发现错误
*value=!open; //value被设置成open的逻辑反
*会悄无声息地交换成
*value!=open; //value与open进行不相等比较
*这条语句会通过编译,它并不改变value的值
*/
#include <stdio.h>
int main() {
int b = 5;
b =- 3; /*从b中减去3*/
printf("b = %d\n", b);
b= -3; /*把-3赋给b*/
printf("b = %d\n", b);
double epsilon=.0001;
printf("epsilon = %f\n", epsilon);
//can't pass the compiliation
//epsilon.=0001;
printf("epsilon = %f\n", epsilon);
int value = 3, open = 4;
bool result = value =! open; /*value被设置成open的逻辑反*/
printf("!open = %d\n", !open);
printf("result = %d\n", result);
result = value != open; /*value与open进行不相等比较*/
printf("result = %d\n", result);
return 0;
}
/* 输出:

*/ /*看来现在不存在以前的问题了*/
边栏推荐
- Interview assault 70: what is the glue bag and a bag?How to solve?
- 数据库单字段存储多个标签(位移操作)
- 虚拟机的IP地址自动变为127.0.0.1
- 织梦发布文章提示body has not allow words错误
- 任务调度线程池基本介绍
- MySQL 中出现的字符编码错误 Incorrect string value: ‘\x\x\x\x‘ for column ‘x‘
- Pytorch框架学习记录9——非线性激活
- Get started quickly with MongoDB
- [Multi-task learning] Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Experts KDD18
- 98.嵌入式控制器EC实战 EC开发板开发完成
猜你喜欢

Interview Blitz 70: What are sticky packs and half packs?How to deal with it?

乐观锁批量跟新 纯SQL

使用员工管理软件,解锁人力生产力新水平,提高人力资源团队灵活性

Hiking, cured my mental internal friction

技能大赛训练:A部分加固题目

Based on FPGA in any number of bytes (single-byte or multibyte) serial port (UART) to send (including source engineering)

函数(二)

网红驼背矫正产品真的管用吗?如何预防驼背?医生说要这样做

PyTorch笔记 - Attention Is All You Need (2)

New graduate students, great experience in reading English literature, worthy of your collection
随机推荐
Software you should know as a programmer
New graduate students, great experience in reading English literature, worthy of your collection
Different operating with different locks, rounding
相亲模型与有限状态机
LinkedList source code sharing
【Kaggle】House Prices
乐观锁批量跟新 纯SQL
idea实用快捷键合集——持续更新
Interpretation of the meaning of each dimension of two-dimensional, three-dimensional, and four-dimensional matrices
Pytorch框架学校记录11——搭建小实战完整细节
STAHL touch screen repair all-in-one display screen ET-316-TX-TFT common faults
AQS原理和介绍
PyTorch笔记 - Attention Is All You Need (2)
Determine a binary tree given inorder traversal and another traversal method
微服务负载均衡器Ribbon
StringTable详解 串池 性能调优 字符串拼接
OSG笔记:设置DO_NOT_COMPUTE_NEAR_FAR,手动计算远近平面
[译] 容器和 Kubernetes 中的退出码完整指南
人工智能可信安全与评测
R语言 数据的关系探索