
C/C++
文章平均质量分 77
seton040
寻找巨人 然后踩上他的肩膀
展开
-
解剖关键字typedef
带你解剖typedef之前,让我们先来看看POSIX.1中对信号处理函数signal的原型说明:void (*signal(int sig, void (*func)(int)))(int); 对于不熟悉C语言声明的朋友,看到这样的函数原型估计离崩溃不远了,我们再来看看ANSI C中对此函数原型是作如何解释的:typedef void (*sighandler_t)原创 2009-08-28 23:09:00 · 1253 阅读 · 6 评论 -
C语言**位运算**终极剖析
C语言有时候被称为中级语言,即介于低级与高级之家的编程语言,原因是C语言不仅具有高级语言抽象机制,也具有低级语言直接操作变量个别位的能力,即我们即将要讨论的C语言强大的位操作运算。C语言的这种能力也许会让你感到奇怪,但这种能力有时确实是必须的,或者至少是有用的,例如我们通常向硬件设备发送一两个字节来控制该设备,其中的每一位都有特定的含义。许多压缩和加密操作都对单独的位进行操作。高级原创 2009-10-21 16:24:00 · 2001 阅读 · 1 评论 -
一道试题引发的血案
某日,看到一道比较恶心的C语言的试题,考了很多比较绕的知识点,嘴脸如下: int main(void){ int a[4] = {1, 2, 3, 4}; int *ptr1=(int *)(&a+1); int *ptr2=(int *)((int)a+1); printf("%x, %x/n", ptr1[-1], *ptr2);原创 2009-11-03 22:40:00 · 3046 阅读 · 19 评论 -
目标文件里装了什么东西
了解程序中各种变量在编译和运行阶段的状态和属性,对我们开发程序而言是非常有益的,通过对以下几个例子的探讨,搞清楚目标文件中都包含了哪些信息,能让我们明白C语言中各种存储类对程序的影响,也让我们在编写一个程序的时候胸有成竹。就像那个谁说的,真正的程序员,必须对自己程序的每一个字节了如指掌。 我们看看如下这个程序代码: /* simple_section.c */ int原创 2009-11-20 19:57:00 · 714 阅读 · 0 评论 -
玩转VFS
LINUX之所以那么成功,VFS(虚拟文件系统)功不可没,是它让LINUX支持多种多样的文件系统,让我们程序员的生活变得美满幸福,我们可以潇洒地在迥异的文件系统之间进行数据通信而毫不费力,VFS是怎么做到的?看下文分晓。 我们知道,有些文件系统原创 2010-02-02 17:57:00 · 161 阅读 · 0 评论 -
变参函数实现细节
C语言的函数虽然不具备C++的多态性,但也可以接受参数不确定的情况,当然,C语言中的变参函数实际在功能上是受限的,废话不多讲,下面来看看变参函数的边边角角的问题。 讨论之前我们来看一下最熟悉的变参函数printf的原型声明:int printf(const char *format, ...);注意到,在函数中声明其参数是可变的方法是三个点“...”,但同时,这个原创 2010-01-06 15:30:00 · 938 阅读 · 2 评论 -
语句表达式
语句表达式(Statements and Declarations in Expressions)用一对圆括号包含一个复合语句,在GNU C中称之为 语句表达式,比如以下语句: ({ int y = foo (); int z; if (y > 0) z = y; else z = - y; z; })虽然看起来比较纠结,但在GNU C中这是合法的,这个 语句表达式 调用foo函数,然后计算其返回值的绝对值,整个表达式的值就是最右边的变量z的值。在宏定义中这原创 2010-07-25 14:11:00 · 345 阅读 · 0 评论 -
哈希表在进程管理中的应用
LINUX-2.6内核还支持另一种双向链表,其与 list_head 有明显的不同,因为它不是循环的,这就是现在要讨论的内核中的哈希表,也叫散列表。对于散列表而言,重要的不是在固定的时间内找到表中的最末一个元素,而是空间。表头存放在 hlist_head 中,这个结构具体实现如下:struct hlist_head{ struct hlist_node *first;};可以看得出来,不像双向链表的实现,哈希表的表头结点只有一个成员,指向下一个结点(如果没有就为NULL原创 2010-10-25 12:00:00 · 1098 阅读 · 1 评论