C语言
文章平均质量分 78
testken423
这个作者很懒,什么都没留下…
展开
-
assert()函数用法总结
assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include assert.h> void assert( int expression ); assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。请看下面的程序清单badpt转载 2014-07-21 15:12:59 · 532 阅读 · 0 评论 -
do{...}while(0)的意义和用法
linux内核和其他一些开源的代码中,经常会遇到这样的代码: do{ ... }while(0) 这样的代码一看就不是一个循环,do..while表面上在这里一点意义都没有,那么为什么要这么用呢? 实际上,do{...}while(0)的作用远大于美化你的代码。查了些资料,总结起来这样写主要有以下几点好处: 1、辅助定义复杂的宏,避免引转载 2014-07-24 09:37:40 · 512 阅读 · 0 评论 -
嵌入式C编程
/* 大小端转换 */ #define T(x) (((x&0xff)>8)|((x&0xff000000)>>24))转载 2014-07-18 16:12:09 · 633 阅读 · 0 评论 -
C文件读写函数介绍
1.fopen() fopen的原型是:FILE *fopen(const char *filename,const char *mode),fopen实现三个功能:为使用而打开一个流,把一个文件和此流相连接,给此流返回一个FILR指针。 参数filename指向要打开的文件名,mode表示打开状态的字符串,其取值如下: 字符串 含义 "r" 以只读方式转载 2014-09-01 21:08:00 · 525 阅读 · 0 评论 -
浅谈线程池
相关概念: 线程池可以看做容纳线程的容器; 一个应用程序最多只能有一个线程池; ThreadPool静态类通过QueueUserWorkItem()方法将工作函数排入线程池; 每排入一个工作函数,就相当于请求创建一个线程; 线程池的作用: 线程池是为突然大量爆发的线程设计的,通过有限的几个固定线程为大量的操作服务,减少了创建和销毁线程转载 2014-11-29 10:19:41 · 394 阅读 · 0 评论 -
为什么要用回调函数?
我们为什么要用回调函数呢? 记得在一次C++开发面试的时候被被一位主面官问到过这个问题,现在再回答一遍。 我们对回调函数的使用无非是对函数指针的应用,函数指针的概念本身很简单,但是把函数指针应用于回调函数就体现了一种解决问题的策略,一种设计系统的思想。 在解释这种思想前我想先说明一下,回调函数固然能解决一部分系统架构问题但是绝不能再系统内到处都是,如果你发现你的系统内到处都是回调函数,那转载 2015-01-21 21:46:54 · 987 阅读 · 0 评论 -
有趣的C语言预处理
分类解释 在编译器编译之前,会首先搜索预处理指令,按照指令完成编译,预处理又分为:文件包含、条件编译、布局控制(杂注)和宏替换。 文件包含: #include""和#include 后者是编译器系统路径中的.h,一般C语言标准库函数在编译器里集成,如 #include 。 只要包含了.h,而.h里有函数声明(或变量、结构体实例),那么不论这个函数(变量、结构体实例)在那转载 2015-03-03 02:23:05 · 745 阅读 · 0 评论