[Expert C Programming] Notes (二)

<<Expert C Programming>> Notes (一)

这本书的精华实在太多了,呵呵,只能在精华部分再提取精华。当然下面的内容也不全是书上的,包含着自己的思想在里面.

第一条:一个‘L’的NULL和两个‘L’的NULL

请牢记这两句话:

一个‘L’的NUL用于结束一个ACSII字符串

两个‘L’的NULL用于表示什么也不指向(空指针)

................................................................................................

第二条:const关键字并不真正表示常量,如下面的一段程序:

const int two =2; switch(i) { case 1:printf("case 1/n"); break; case two:printf("case 2/n"); break; case 3:printf("case 3/n"); break; default:; } 上面的代码将产生一个编译错误,这并不是switch本身的过错,但这程序反应了const其实并不是真正的常量。

另外关于switch的“fall through”缺省采用,在97%情况下都是错误的!

...............................................................................................

第三条:关于switch中的break!


code() { switch(line) { case h:doit(); break; case h2: if(x == STUFF) { do_first_stuff(); if(y == OTHER_STUFF) { break; } do_later_stuff(); }/*想跳到这边*/ initialize_modes_pointer();//这条语句就不会执行了 break; default: do_something(); } /*事实上跳到这边*/ }

上面的代码其实是滥用break的结果!在这边可以用goto或者把那条语句取反就可以了

................................................................................................

第四条:使一段代码第一次执行时的行为与以后执行时不同


generate_initialized(char * string) { static char separator=' '; printf("%c %s/n", separator, string); separator = ','; }

上面的程序,“第一次执行的前面加个空格”相比“最后一次执行,省略逗号后缀”对程序而言更简单了

................................................................................................

第五条:太多的缺省可见性!

定义C函数时,在缺省的情况下函数的名字是全局可见的,可以在函数的名字前加个冗余的extern关键字,但是如果想要限制这个函数的访问,就必须加个static关键字,如:

extern functuon pear() (/*在任何地方均可见*/)

static functuon pear() (/*在这个文件之外不可见*/)

.................................................................................................

第六条:其实在变成中只要记住两个优先级就够了:乘法和除法先于加法和减法,在涉及其他的操作符时一律加上括号!

.................................................................................................

第七条:用fgets()彻底取代gets()。fgets()函数对读入的字符数设置了一个限制,这样就不会超出缓冲区范围。应该把gets (line);


if(fgets(line,sizeof(line),stdin)==NULL) exit(1); .................................................................................................

第八条:关于结构的声明和变量的定义

一般的定义方式为:

struct veg{int weight,price_per; } onion,radish,turnip;

而比较容易阅读的方式为:

structure veg {int weight,price_per}; struct veg onion,radish,turnip; ..............................................................................................

第九条:参数在传递时首先尽可能的存放于寄存器中(追求速度)。int型变量i跟只包含一个int型成员的结构变量s在参数传递时方式可能完全不同。一个int型参数一般会被传递到寄存器中,而结构参数则很可能被传递到堆栈中。

................................................................................................

第十条:枚举具有一个优点:#define定义的名字一般在编译时被丢弃,而枚举名字则通常一直在调试器中可见,可以在调试代码时使用它们




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值