
Unix C及C高阶编程
文章平均质量分 86
工匠若水
加微信:bitdev
展开
-
有意思的stdarg.h头文件
stdarg.h是C语言中C标准函数库的头文件,stdarg是由standard(标准) arguments(参数)简化而来,主要目的为让函数能够接收可变参数。C++的cstdarg头文件中也提供这样的功能;虽然与C的头文件是兼容的,但是也有冲突存在。 可变参数函数的参数数量是可变动的,它使用省略号来忽略之后的参数。例如c语言中的printf函数一般。代表性的声明为:int c原创 2012-12-11 18:34:59 · 1724 阅读 · 0 评论 -
C语言回调函数浅析
在做C语言开发,尤其是中间层开发过程中,回调函数是我们必须掌握的一种方法。由于本人也是刚工作,属于实习期。过去对回调函数有些了解与应用,但是在这里为了加深理解,方便查阅,我对自己回调心得有以下认识,谢谢笑纳,批评指正。我的联系方式在博客左侧。 俺理解的回调概念: 回调函数可以把调用者与被调用者分开,所以调用者不关心谁是被调用者。它只需知道存在一个具有特定原型和限制条件的被调运函原创 2013-04-26 17:18:05 · 3332 阅读 · 0 评论 -
C语言关键字volatile(不知道的别说你是干嵌入式的)
我在网上看见一个帖子说回答不出这个问题的人是不会被雇佣的。这是区分C程序员和嵌入式系统程序员的最基本的问题。搞嵌入式的家伙们经常同硬件、中断、RTOS等打交道,所有这些都要求用到volatile变量。下面来看下面试题中提到的问题(答案我从网络整理,以便复习): 关键字volatile有什么含意?并给出三个不同的例子。 volatile的本意是“易变的” 由于访问寄存器的速度要快过RAM原创 2012-12-09 17:55:03 · 9802 阅读 · 2 评论 -
C语言标记化结构初始化语法扫盲
以前在学习C语言时听说过所谓的C语言标记化结构初始化语法,但当时出于偷懒就没有细究。最近学习Linux设备驱动,就对它的结构体初始化写法感到奇怪,所有的初始化代码都写清了变量名,并且变量名前面还有一个诡异的点。又遇到了,就查了一下,长见识了啊,此种初始化写法并不是什么特殊的代码风格,而是所谓的C语言标记化结构初始化语法(designated initializer),而且还是一个ISO标准。原创 2012-12-11 20:06:28 · 1698 阅读 · 0 评论 -
Linux下清空缓冲区的方法
C标准规定fflush()函数是用来刷新输出(stdout)缓存的。对于输入(stdin),它是没有定义的。但是有些编译器也定义了fflush( stdin )的实现,比如微软的VC。其它编译器是否也定义了fflush( stdin )的实现应当查找它的手册。 GCC编译器没有定义它的实现,所以不能使用fflush(stdin)来刷新输入缓存。对于没有定义fflush(stdin)的编译原创 2013-03-26 10:36:26 · 5050 阅读 · 0 评论 -
extern详解
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数转载 2013-03-24 15:52:32 · 1352 阅读 · 0 评论 -
C语言内存分布图
别的不多说了,图比文字更具有描述力,自己看! 一直都把堆栈放一起,所以很多人会误以为他们的组合是一个词语,就像“衣服”一样简单,其实不然,今天在下就将最近学习总结的一些与大家分享。 一个由C/C++编译的程序占用的内存分为以下几个部分: 1、栈区(stack):又编译器自动分配释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构的栈。原创 2013-03-24 16:59:32 · 15266 阅读 · 6 评论 -
C语言函数调运栈及开销
参考1 参考2 参考3转载 2013-03-24 14:39:05 · 1749 阅读 · 0 评论 -
C语言位段理解
信息的存取一般以Byte为单位。实际上,有时存储一个信息不必用一个或多个字节,例如,“真”或“假”用0或1表示,只需1位即可。在计算机用于过程控制、参数检测或数据通信领域时,控制信息往往只占一个字节中的一个或几个二进制位,常常在一个字节中放几个信息。 怎样向一个字节中的一个或几个二进制位赋值和改变它的值呢?可以用以下两种方法: (1)可以人为地将一个int变量data分为几部分。原创 2013-03-20 19:36:33 · 4123 阅读 · 0 评论 -
小心fseek函数的返回值
有时候我们正常写程序时代码没有问题的情况下,认为fseek的返回值不是0就是其他,即认为一旦seek出界文件都返回菲0值。其实以前我也没太在意,没有极端测试,这次公司实习解Ts流时为了保证代码的健壮性,和同事讨论发现fseek函数远远不是我想像中那样返回。 Moves the file pointer to a specified location. int fseek( FILE *stre原创 2013-03-20 15:26:17 · 7784 阅读 · 2 评论 -
GCC编译四步标准
标准 ANSI C:这一标准是 ANSI(美国国家标准局)于 1989 年制定的 C 语言标准。后来被 ISO(国际标准化组织)接受为标准,因此也称为 ISO C。 ANSI C 的目标是为各种操作系统上的 C 程序提供可移植性保证,而不仅仅限于 UNIX。 该标准不仅定义了 C 编程语言的语发和语义,而且还定义了一个标准库。这个库可以根据 头文件划分为 15 个部分,其中包括:字符类原创 2013-03-12 13:46:35 · 3662 阅读 · 0 评论 -
sscanf() 实战
sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: int sscanf( const char *, const char *, ...); int sscanf(const char *buffer,const char *format,[argument ]...); buffer 存储的数据 fo原创 2012-12-13 10:38:37 · 1257 阅读 · 0 评论 -
static详解
当使用static修饰变量、函数、成员变量、成员函数等的时候可以达到很好的隐藏它们的作用,效果如下: 一、修饰变量和函数 1,用static修饰的变量的声明式即为其定义式。如果没有手动的初始化,系统会为该变量提供一个初始值。但是static变量最好在使用的编译单元里(.c/.cpp)声明定义,如果定义在头文件里,如果头文件被重复引用讲导致变量的重复定义。在编译单元里定义static变量转载 2013-03-14 16:35:23 · 2601 阅读 · 0 评论