当前位置:网站首页>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;
}
/* 输出:
*/ /*看来现在不存在以前的问题了*/
边栏推荐
- Hiking, cured my mental internal friction
- tiup mirror clone
- 外骨骼机器人(七):标准步态数据库
- [译] 容器和 Kubernetes 中的退出码完整指南
- latex paper artifact -- server deployment overleaf
- 使用员工管理软件,解锁人力生产力新水平,提高人力资源团队灵活性
- Nacos 配置中心
- Application of Acrel-5010 online monitoring system for key energy consumption unit energy consumption in Hunan Sanli Group
- Wildcard SSL/TLS certificate
- 这些 hook 更优雅的管理你的状态
猜你喜欢
MySQL Syntax Basics
STAHL触摸屏维修一体机显示屏ET-316-TX-TFT常见故障
Pytorch框架学习记录8——最大池化的使用
excel高级绘图技巧100讲(二十二)-如何对不规则数据进行分列
漏洞分析丨HEVD-0x6.UninitializedStackVariable[win7x86]
【Dart】dart之mixin探究
【Social Media Marketing】How to know if your WhatsApp is blocked?
Questions I don't know in database kernel interview(1)
【Untitled】
StringTable详解 串池 性能调优 字符串拼接
随机推荐
iptables的使用简单测试
Multithreaded producers and consumers
Batch get protein .pdb files based on Uniprot ID/PDB ID
Kubernetes 如何实现组件高可用
StringTable详解 串池 性能调优 字符串拼接
使用员工管理软件,解锁人力生产力新水平,提高人力资源团队灵活性
Excel advanced drawing techniques, 100 (22) - how to respectively the irregular data
ahooks 是怎么处理 DOM 的?
R语言 线性回归的有关方法
[译] 容器和 Kubernetes 中的退出码完整指南
"Torch" tensor multiplication: matmul, einsum
[Energy Conservation Institute] Application of Intelligent Control Device in High Voltage Switchgear
线上问题排查常用命令,总结太全了,建议收藏!!
网络安全与基础设施安全局(CISA):两国将在网络安全方面扩大合作
Which websites are commonly used for patent searches?
数字孪生北京故宫,元宇宙推进旅游业进程
乐观锁批量跟新 纯SQL
tiup mirror genkey
【Kaggle】House Prices
The Internet giant development process