随笔分类 -  C语言

编写安全代码:死循环
摘要:死循环,是不安全代码的一种,易造成CPU load过高,从而会导致低优先级进程得不到调度而饿死。 基于这种危害,因此我们在写代码的时候要注意避免死循环。 阅读全文

posted @ 2013-11-29 22:09 Randy Xu 阅读(1389) 评论(0) 推荐(0)

C语言拾遗(六):分析C语言的函数调用过程
摘要:一个过程调用包括将数据和控制从代码的一部分传递到另一部分。另外,它还必须在进入时为过程的局部变量分配空间,并在退出时释放这些空间。 实现过程调用,编译器使用了一个基于栈的方法。栈,先进后出。机器用栈来传递过程的参数,存储返回信息,保存寄存器等等。 1. call function:将返回地址入栈,并跳转到function的起始处。 2. leave:使栈做好返回的准备。 3. ret:返回,从栈中弹出地址,并跳转到这个位置。 阅读全文

posted @ 2013-04-30 17:29 Randy Xu 阅读(1667) 评论(1) 推荐(3)

C语言拾遗(五):分析switch语句机制---下篇
摘要:通过两个例子,对比阅读C代码和汇编代码,探究一下switch语句的本质。 switch语句的本质是条件语句,条件语句的本质是跳转。 当case分支多了的时候(一般大于四个时),编译器巧妙地通过跳转表的思想来访问代码位置。 关键词:跳转,跳转表。 阅读全文

posted @ 2013-04-19 22:25 Randy Xu 阅读(1504) 评论(6) 推荐(0)

C语言拾遗(四):分析switch语句机制---上篇
摘要:要理解C语言的运行机制,阅读对应的汇编代码是非常有帮助的。 switch不会在每个case标签后面的语句执行完毕后自动终止。一旦执行某个case语句,程序将会一次执行后面所有的case,除非遇到break语句。 这被称之为“fall through”。 switch内部的任何语句都可以加上标签,所有的case都是可选的,任何形式的语句,包括带标签的语句都是允许的。 break语句事实上跳出的是最近的那层循环语句或switch语句。 阅读全文

posted @ 2013-04-07 22:33 Randy Xu 阅读(1908) 评论(3) 推荐(3)

C语言拾遗(三):分析C语言声明
摘要:C语言非常难理解的是指针,可是比指针还难理解的是什么呢?我想莫非是C语言的声明了。 本文告诉你运用优先级规则,如庖丁解牛一般来剖析C语言的声明。 阅读全文

posted @ 2013-03-24 17:15 Randy Xu 阅读(1210) 评论(4) 推荐(2)

C语言拾遗(二):符号重载
摘要:C语言一个很重要的特点是简洁。但有时候它太简洁了,仅增加,修改或删除一个字符,原先的程序就可以截然不同。 简洁的C语言会让一个符号,在不同的上下文环境里表示不同的意思。这称之为符号“重载”。 这是C语言的简洁之美呢,还是简洁之痛呢?抛砖引玉,欢迎讨论! 阅读全文

posted @ 2013-03-22 21:57 Randy Xu 阅读(1054) 评论(5) 推荐(1)

C语言拾遗(一):整型提升
摘要:整型提升:如果原始类型的所有值都可用int类型表示,则其值将被转换为int类型;否则将被转换为unsigned int类型。 整型转换:将任何整数转换为某种指定的无符号数类型数的方法是,以该无符号数类型能够表示的最大值加1为摸,找出与此整数同余的最小的非负值。 阅读全文

posted @ 2013-03-17 19:17 Randy Xu 阅读(965) 评论(5) 推荐(2)

导航