C 专家编程===读书笔记==待续

读书笔记,仅作为博主关心的、不理解的 相关点的解释,整理为笔记,方便之后的再次查看。

第一章:C: 穿越时空的迷雾

1、C简史:

a>Multics工程,目的是创建一个操作系统,,,,失败==经验
b>UNIX系统的产生:一个叫Ken Thompson的研究员+同事 Dennis Ritchie 移植某些软件到PDP-7硬件平台;期间Ken Thompson 为PDP-7 编写了操作系统(汇编实现),最后 另一个大爷Brian Kernighan 在1970年给它取名为UNIX,并总结了Multics工程的经验教训。
c>C语言的产生:开发UNIX过程中,Ken Thompson+ Dennis Ritchie二位尝试+创造了 BCPL> B> new B> C语言(早期的)==1965.7月–1972.3月期间
d>可移植的标准I/O库(open、read、write等io函数):最早由Mike Lesk于1972年左右 编写;
e>C语言最早流通版本(K&R C):1978年,经典著作 《The C Programming Language》出版,作者Ken Thompson+ Dennis Ritchie;二位因此而闻名
e2>C语言编译器:1978年,steve Johnson编写了pcc可移植的C编译器
f> ANSI C:1983年,ANSI组织成立C语言工作小组,开始了C语言的标准化工作;
1989年12月,C语言标准草案被ANSI组织接纳;之后ISO C标准出现;最终1990年ANSI C接纳ISO C;于是 世人说的 标准C语言=ISO C,,,,但ANSI C参与的工作更多,业内名声也就更大,最终定格于 ANSI C标准;

关注点:

1、虽然约定采用“.h”作为头文件的扩展名,但在头文件和包含实现代码的 对象库之间在命名上却没有相应的约定,这多少令人不快。????===不理解


2、1978年,steve Johnson编写了pcc可移植的C编译器==有机会尝试了解下。


3、可移植的代码定义:
- 只是用ASNI C语言标准 已确定的 C语言特性
- 不突破由编译器实现的限制
- 不产生任何依赖于编译器定义的 或未确定或未定义等特性的 输出

不可移植的代码:
a>由编译器确定的特性:当整型数向右移位时,要不要扩展他的符号位???

int a= (~0);//0xFF FF FF FF
a>>=1;//此时 最高位 bit31位,应不应该动???

b>未确定的==ANSI C标准中,未明确规定该怎样做
参数求值顺序?

int i = 3;
printf("%d,%d,%d\n", i, ++i, ++i );

怀代码:
c>未定义的:在某些不正确情况下的做法,ANSI C并未规定应该如何处理
eg:当一个有符号整数溢出时,该采取什么行动???

留意:下面的代码为何???===没看懂

/*并不严格遵守标准:其输出结果是由编译器定义的*/
#include <limits.h>
#include <stdio.h>
int main()
{
    (void)printf("biggest int is %d",INT_MAX);
    return 0;
}

4/预处理:
a>替换源文本中的三联符。三连符是C语言为了适应某些输入设备上没有的字符而设定的,比如??=表示”#”。
b>预处理规则定义得更加严格,有一条新规则就是相邻的字符串字面值会被自动连接在一起;eg:“ab”“cde” 等价于 “abcde”

猜你喜欢

转载自blog.csdn.net/guozhongwei1/article/details/80964391
今日推荐