




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C专家编程读书笔记(一)By:LShangBlog:/LShang C 语言的发展1965-7(BCPL)-1969(B)-1971(New B)-1972-3(早期的C)-1976-9(K&C)-1983-9(ANSI C)-C 的许多特性是为了方便编译器设计者而建立的1 数组下标从0开始(定义数组a100的合法范围是a0 a99)2 基本数据类型直接与底层硬件对应3 auto关键字只对创建符号表入口的编译器设计者有意义(进入程序块时自动分配内存)4 表达式中的数组名可以看作是指针(并非永远如此)5 float会被自动扩展为double(仅在最初如此,ANSI C不再如此)6 不允许嵌套函数(函数内部不允许包含另一个函数的定义)7 register关键字(可以提供程序中的热门变量,使之将其存放到寄存器中。)关于register关键字,书中说“这个设计可以说是一个失误,如果让编译器在使用各个变量时自动处理寄存器的分配工作,显然比一经声明就把这类变量在生命期内始终保留在寄存器里要好。使用register关键字,简化了编译器,却把包袱丢给了程序员。”C 编译器不曾实现的一些功能必须通过其他途径实现:标准 I/O 库和 C 预处理器最早的可移植 I/O 库出现在1972年,由 Mike Lesk 编写C 预处理器主要实现三个功能 字符串替换 头文件包含 通用代码模板的扩展(宏)宏的实际参数只按照原样输出。在宏的扩展中,空格会对扩展的结果造成很大影响。#define a(y) a_expanded(y)a(x)/被扩展为a_expanded(x);/而#define a (y) a_expanded(y)/则被扩展为(y) a_expanded (y)(x);复制代码书中建议:8 宏最好只用于命名常量,并为一些适当的结构提供简捷的记法。9 宏名应该大写,这样便容易与函数名区分10 千万不要使用 C 预处理器来修改语言的基础结构,因为这样 C 就不再是 C K&R C 和 ANSI C1978年,The C Program Language一书出版,其作者 Brian Kernighan 和 Dennis Ritchie 名声大噪。这个版本的 C 被称为 K&R C1983年,美国国家标准化组织(ANSI)成立了 C 语言工作小组,开始了 C 语言的标准化工作1989年12月,ANSI委员会接受了 C 语言标准草案,随后国际标准化组织 ISO 也接纳了 ANSI C 标准(C 89标准)1990年初,ANSI 重新采纳了 ISO C(删除掉了Rationale一节),所以原则上说日常所说的标准 C 应是 ISO C 而不是 ANSI CK&R C 和 ANSI C 的区别11 函数原型的增加12 关键字的增加13 安静的改变14 其他区别原型是函数声明的扩展,这样不仅函数名和返回类型已知,所有形参类型也是已知的参数传递的过程类似于赋值每个实参都应该具有自己的类型,这样它的值就可以赋值给与它所对应的形参类型的对象(该对象的类型不能含有限定符)参数传递时的相容与不相容char *cp;constchar *ccp;ccp = cp;/可以相容复制代码char * 是一个指向没有限定符的 char 型指针const char * 是一个指向有 const 限定符的 char 型指针char 类型与 char 类型可以相容,左操作数(形参)具有右操作数(实参)所指向类型的限定符(无限定符),再加上自身的限定符(const)。char *cp;constchar *ccp;cp = ccp;/不可以相容复制代码char * 是一个指向没有限定符的 char 型指针const char * 是一个指向有 const 限定符的 char 型指针char 类型与 char 类型可以相容,左操作数(形参)不具有右操作数(实参)所指向类型的限定符(const)测试代码#include int main()char *cp = By LShang;constchar *ccp = cp; printf(%sn,ccp);return0;复制代码-Configuration: Test - Win32 Debug-Compiling.Test.cTest.obj - 0 error(s), 0 warning(s)#include int main()constchar *cp = By LShang;char *ccp = cp; printf(%sn,ccp);return0;复制代码-Configuration: Test - Win32 Debug-Compiling.Test.cC:CodeTestTest.c(5) : warning C4090: initializing : different const qualifiersTest.obj - 0 error(s), 1 warning(s)/借用书中代码foo(constchar *p) main(int argc,char *argv) foo(argv);复制代码根据 ANSI C 标准,此代码中的形参和实参是不相容的const char *p 指向一个没有限定符的 const char * 型指针char *argv 指向一个没有限定符的 char * 型指针虽然形参具有实参所指向类型的限定符(无),但是由于形参和实参所指向的类型不一样,所以它们不相容const char * 类型与 char * 类型可以相容,但相容性无法传递,所以即使const char * 类型与 char * 类型可以相容也不代表const char * 类型和 char * 类型可以相容,所以虽然const char * 类型和 char * 类型都没有限定符,但是它们之间不能进行赋值以上内容均根据理论推出,书中提到这种赋值方式在 C +编译器中是合法的,所以无法在 VC 环境下测试,TC 2.0环境貌似也没有警告。const 限定符关键字 const 并不能将一个变量变成一个常量在一个符号前加上 const 限定符只是表示这个符号不能被赋值,但它并不能防止通过其他方法来修改这个值(如指针)constint n; / 带有限定符(const)的 int 型变量,n 不可改变constint *n;/ 指向一个带有限定符(const)的 int 的指针,*n 不可改变constint *n;/ 指向一个带有限定符(const)的 int 的指针的指针,*n 不可改变. .复制代码但可以通过其他方式来间接改变带有 const 限定符的变量的值#include int main()constint n = 0;int *pn = &n; printf(n = %dn,n); *pn = 1; printf(n = %dn,n);return0;复制代码虽然在编译时会产生一条警告信息-Configuration: Test - Win32 Debug-Compiling.Test.cC:CodeTestTest.c(6) : warning C4090: initializing : different const qualifiersTest.obj - 0 error(s), 1 warning(s)但是程序可以正常链接和运行而且也满足了间接修改一个带有 const 限定符的变量的值的要求n = 0n = 1Press any key to continue算术转换的改变K&R C 采用无符号保留(unsigned preserving)原则,就是当一个无符号类型与 int 或更小的整型混合使用时,结果类型是无符号类型ANSI C 采用值保留(value preserving)原则,就是把几个整型操作数混合使用时,结果类型有可能是符号数,也可能是无符号数,取决于操作数的类型的相对大小采用通俗语言,ANSI C 标准所表示的意思大致如下: 当执行算术运算时,操作数的类型如果不同,就会发生转换。数据类型一般朝着浮点精度更高、长度更长的方向转换,整型数如果转换为 signed 不会丢失信息,就转换为 signed,否则转换为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年人保财险陕西省分公司招聘(57人)模拟试卷及答案详解(全优)
- 2025年衢州市卫生健康委员会“引才聚智‘医’起向未来”医疗卫生人才招聘78人考前自测高频考点模拟试题及参考答案详解
- 2025广东深圳市服务高质量发展专项招录紧缺专业公务员486人考前自测高频考点模拟试题附答案详解(典型题)
- 2025江西职业技术大学高层次人才招聘51人考前自测高频考点模拟试题有答案详解
- 2025国网冀北电力有限公司第二批高校毕业生录用人选的考前自测高频考点模拟试题附答案详解(突破训练)
- 2025广东省江门市蓬江区教师招聘23人考前自测高频考点模拟试题及答案详解(有一套)
- 2025北京化工大学化办公室(中心)招聘1人模拟试卷及答案详解(夺冠系列)
- 2025春季国家电投广东公司校园招聘模拟试卷及答案详解(名校卷)
- 2025河北省地震局事业单位招聘工作人员1人(第二批)考前自测高频考点模拟试题及答案详解(典优)
- 2025江西人力诚聘派驻江西江铜华东铜箔有限公司劳务派遣人员14人模拟试卷及一套答案详解
- 金华兰溪市卫生健康局所属事业单位招聘笔试真题2024
- 国务院便民服务管理办法
- 甘肃省医疗建设管理办法
- 胸痛的护理教学课件
- 《中国高血压防治指南(2024年修订版)》解读课件
- DIEP乳房重建术后的护理指南
- GB/T 17643-2025土工合成材料聚乙烯土工膜
- 艺术漆涂料施工合同协议
- 陈皮种植转让合同协议
- 小学科学教科版六年级上册全册教案(共28课)2021年
- 预防青少年药物滥用-主题班会课件
评论
0/150
提交评论