C/C++语言
warrior-ai
专注嵌入式开发技术
展开
-
C语言volatile关键字的用法
在学习C关键词的时候,我们看到了一个新面孔——volatile。在程序员面试宝典中提到“关键字volatile的面试例题是考查嵌入式编程”,中间有一段解析: 回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。搞嵌入式的家伙们经常同硬件、中断、RTOS等等打交道,所有这些都要求用到volatile变量。不懂得volatile的内容将会带来灾难。 假转载 2012-11-29 08:28:44 · 658 阅读 · 0 评论 -
C语言中的符号
1.标准C语言的基本符号 2.注释符号几个似非而是的注释问题 C语言的注释可以出现在C语言代码的任何地方。这句话是不对的、 1 int/*...*/i; 编译器的确会将注释剔除,但不是简单的剔除,而是用空格代替原来的注释 2 char*s="abcdefgh //hijklmn";我们知道双引号引起来的是字符串常量,那双斜杠也不例外 3 //Isita \ vali转载 2012-12-09 18:55:55 · 1127 阅读 · 0 评论 -
数组指针和指针数组的区别
数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。 如要将二维数组赋给一指针,应这样赋值: int a[3][4]; int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a;转载 2013-01-01 20:01:10 · 361 阅读 · 0 评论 -
环形缓存区bufferC语言实现
环形缓存区bufferC语言实现 消息队列锁调用太频繁的问题算是解决了,另一个让人有些苦恼的大概是这太多的内存分配和释放操作了。频繁的内存分配不但增加了系统开销,更使得内存碎片不断增多,非常不利于我们的服务器长期稳定运行。也许我们可以使用内存池,比如SGI STL中附带的小内存分配器。但是对于这种按照严格的先进先出顺序处理的,块大小并不算小的,而且块大小也并不统一的内存分配情况来说,更多使用的是转载 2013-02-05 10:03:37 · 27110 阅读 · 0 评论 -
c语言全局变量和局部变量问题汇总
1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。 2、如何引用一个已经定义过的全局变量? 答:extern转载 2013-03-14 11:54:49 · 1064 阅读 · 0 评论 -
ubifs文件系统简介
UBIFS文件系统简介(转) 一、 UBIFS 简介 由IBM、nokia工程师Thomas Gleixner,Artem Bityutskiy等人于2006年发起,致力于开发性能卓越、扩展性高的FLASH专用文件系统,以解决当前嵌入式环境下以FLASH作为MTD设备使用时的技术瓶颈, 开发背景: FLASH特性: FLASH是一类电可擦出可编程存储体,在使用方式上与硬转载 2013-03-17 14:36:27 · 1012 阅读 · 0 评论 -
基于MCP2515的Linux CAN总线驱动程序设计(一)
1.前言 CAN(Controller Area Network)总线,即控制器局域网总线,是一种有效支持分布式控制或实时控制的串行通信网络。由于其高性能、高可靠性、及独特的设计和适宜的价格而广泛应用于工业现场控制、智能楼宇、医疗器械、交通工具以及传感器等领域,并已被公认为几种最有前途的现场总线之一。CAN总线规范已经被国际标准化组织制订为国际标准ISO11898,并得到了众多半导体器件厂商的支转载 2013-03-19 22:52:21 · 1640 阅读 · 0 评论 -
指针应用中*的使用
大家可能一看标题就觉得这有什么,不就是间接访问吗!实则不然,如果说都理解为间接访问,很多用法都没法解释,下面我们以实际例子来说明*的用法。 1. #include 2. int main(void) 3. { 4. char a = 0; 5. char *p = &a; 6. char **q = &p转载 2013-03-19 22:46:30 · 905 阅读 · 0 评论 -
Linux内核Socket CAN中文文档
自己在年假中空闲之余翻译的内核中Socket CAN的文档,原文地址在: http://lxr.linux.no/linux+v2.6.34/Documentation/networking/can.txt 但是这篇文档没有涉及广播管理协议套接字 (SOCK_DGRAM) 的内容。 另外一篇比较好的Socket CAN的英文文档是(详细介绍了广播管理协议套接字): Low转载 2013-03-23 00:00:05 · 1311 阅读 · 0 评论 -
如何阅读源代码(一)–导论
1.要养成一个习惯, 经常花时间阅读别人编写的高品质代码. 2.要有选择地阅读代码, 同时, 还要有自己的目标. 您是想学习新的模式|编码风格|还是满足某些需求的方法. 3.要注意并重视代码中特殊的非功能性需求, 这些需求也许会导致特殊的实现风格. 4.在现有的代码上工作时, 请与作者和维护人员进行必要的协调, 以避免重复劳动或产生厌恶情绪. 5.请将从开放源码软件中得到的益处看作是一项贷转载 2013-03-23 23:16:42 · 702 阅读 · 0 评论 -
软件概要设计与详细设计的区别
概要设计与详细设计的区别 概要设计就是设计软件的结构,包括组成模块,模块的层次结构,模块的调用关系,每个模块的功能等等。同时,还要设计该项目的应用系统的总体数据结构和数据库结构,即应用系统要存储什么数据,这些数据是什么样的结构,它们之间有什么关系。 详细设计阶段就是为每个模块完成的功能进行具体的描述,要把功能描述转变为精确的、结构化的过程描述。 概要设计阶段转载 2013-03-26 21:35:00 · 1263 阅读 · 0 评论 -
c语言逻辑运算符使用分析.
1.||与&符号 短路规则: Ø ||从左向右开始计算,当遇到为真的条件时停止计算,整个表达式为真;所有条件为假时表达式才为假。 Ø &&从左向右开始计算,当遇到为假的条件时停止计算,整个表达式为假;所有条件为真时表达式才为真。 2.!符号 C语言中的逻辑符“!”只认得0,只知道见了0就返回1。 Ø 因此当其作用的值不是0时,其结果为0。 3.三目运算符(a?b:c)原创 2012-12-09 19:38:41 · 593 阅读 · 0 评论 -
C语言中enum类型的用法
11.10 枚举类型 在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等。如果把这些量说明为整型,字符型或其它类型显然是不妥当的。为此,C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值,被说明为该“枚举”类型的变量取值不能超过定义的范围。应该说明的是,枚举类型是一种基本数据类型,而不是一种构造类转载 2012-12-04 08:31:24 · 7367 阅读 · 0 评论 -
C语言关键字static的用法
1、概述 static 声明的变量在C语言中有两方面的特征: 1)、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。 2)、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。 2、问题:Static的理解 关于static变量,请选择下面所有说法正确的内容:转载 2012-11-29 08:19:17 · 550 阅读 · 0 评论 -
c语言中可变参数函数的设计
c语言中可变参数函数的设计 1,首先,怎么得到参数的值。对于一般的函数,我们可以通过参数对应在参数列表里的标识符来得到。但是参数可变函数那些可变的参数是没有参数标识符的,它只有“…”,所以通过标识符来得到是不可能的,我们只有另辟途径。 我们知道函数调用时都会分配栈空间,而函数调用机制中的栈结构如下图所示: | ......转载 2012-12-01 12:07:19 · 827 阅读 · 0 评论 -
C语音关键字auto,static,register区别
auto即C语言中局部变量的默认属性 编译器默认所有的局部变量都是auto的 static修饰的局部变量存储在程序静态区 static的另一个意义是文件作用域标示符 ―static修饰的全局变量作用域只是声明的文件中 ―static修饰的函数作用域只是声明的文件中 register关键字指明将变量存储于寄存器中 register只是请求寄存器变量,但不一定请求成功 re原创 2012-12-01 15:45:34 · 677 阅读 · 0 评论 -
void的意义
C语言规定只有相同类型的指针才可以相互赋值 void*指针作为左值用于“接收”任意类型的指针 void*指针作为右值赋值给其它指针时需要强制类型转换原创 2012-12-01 19:22:50 · 363 阅读 · 0 评论 -
_INTSIZEOF(n)
定义: #define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) ) 1 我们知道对于IX86,sizeof(int)一定是4的整数倍,所以~(sizeof(int) - 1) )的值一定是 右面[sizeof(n)-1]/2位为0,整个这个宏也就是保证了右面[sizeof(n)-1]/2位为0,其余位转载 2012-12-01 11:36:29 · 697 阅读 · 0 评论 -
extern中隐藏的意义
extern用于声明外部定义的变量和函数 extern用于“告诉”编译器用C方式编译 C++编译器和一些变种C编译器默认会按“自己”的方式编译函数和变量,通过extern关键可以命令编译器“以标准C方式进行编译”。 1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼原创 2012-12-01 21:00:28 · 473 阅读 · 0 评论 -
函数设计的一般原则和技巧
【规则1】原则上尽量少使用全局变量。 因为全局变量的生命周期太长,容易出错,也会长时间占用空间.各个源文件负责本身文件的全局变量,同时提供一对对外函数,方便其它函数使用该函数来访问变量。比如:niSet_ValueName(⋯);niGet_ValueName(⋯);不要直接读写全局变量,尤其是在多线程编程时,必须使用这种方式,并且对读写操作加锁。 【规则2】参数命名要恰当,顺序要转载 2012-12-01 21:33:33 · 482 阅读 · 0 评论 -
if语句中零值比较的注意点
bool型变量应该直接出现于条件中,不要进行比较 普通变量和0值比较时,0值应该出现在比较符号左边 float型变量不能直接进行0值比较,需要定义精度原创 2012-12-01 16:06:33 · 501 阅读 · 0 评论 -
sizeof用法分析
1、什么是sizeof 首先看一下sizeof在msdn上的定义: The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value转载 2012-12-03 22:22:30 · 385 阅读 · 0 评论 -
const用法详解
面向对象是C++的重要特性. 但是c++在c的基础上新增加的几点优化也是很耀眼的 就const直接可以取代c中的#define 以下几点很重要,学不好后果也也很严重 const 1. 限定符声明变量只能被读 const int i=5; int j=0; ... i=j; //非法,导致编译错误 j=i; //合法 2. 必须转载 2012-12-04 08:30:29 · 542 阅读 · 0 评论 -
linux 的system()详解
linux的system () 函数详解 system(执行shell 命令) 相关函数 fork,execve,waitpid,popen 表头文件 #i nclude 定义函数 int system(const char * string); 函数说明转载 2013-04-19 16:58:17 · 706 阅读 · 0 评论