
C/C++
文章平均质量分 51
逆水东流
一二三四、二二三四、三二三四、换个姿势!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
(C)位字段(bit-field)
在存储空间很宝贵的情况下,有可能需要将多个对象保存在一个机器字中,一种常用的方法是:使用类似于编译器符号表的单个二进制位标志集合,外部强加的数据格式(如设备接口等寄存器)经常需要从字的分值中读取数值. 通常采用的方法是:定义一个于相关位的位置对应的”屏蔽码”集合, 如: #define KEYWORD (1<<0) #define EXTRENAL (1<<2)原创 2016-07-07 11:57:57 · 2068 阅读 · 0 评论 -
(C)非局部跳转语句(setjmp和longjmp)
非togo语句在函数内实施跳转,而是在栈上跳过若干调用帧,返回到当前函数调用路径上的某一语句. 头文件包含#include Void longjmp(jmp_buf env,int val);原创 2016-07-07 11:56:42 · 423 阅读 · 0 评论 -
(C)volatile关键字
如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。 下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序:short fla原创 2016-07-07 11:52:18 · 281 阅读 · 0 评论 -
(C)const关键字
为什么使用const?采用符号常量写出的代码更容易维护;指针常常是边读边移动,而不是边写边移动;许多函数参数是只读不写的。const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替),分类如下: 常变量: const 类型说明符 变量名 常引用: const 类型说明符 &引用名 常对象: 类名 const 对象名 常成员函数:转载 2014-11-21 22:10:21 · 439 阅读 · 0 评论 -
(C)static关键字
静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0,使用时可以改变其值。 静态变量或静态函数只有本文件内的代码才能访问它,它的名字在其它文件中不可见。用法1:函数内部声明的static变量,可作为对象间的一种通信机制 如果一局部变量被声明为static,那么将只有唯一的一个静态分配的对象,它被用于在该函数的所有调用中表示这个变量。这个对象将转载 2014-11-21 22:13:33 · 606 阅读 · 0 评论 -
(C)strcpy ,strncpy与strlcpy
1. 背景好多人已经知道利用strncpy替代strcpy来防止缓冲区越界。 但是如果还要考虑运行效率的话,也许strlcpy是一个更好的方式。2. strcpystrcpy 是依据 /0 作为结束判断的,如果 to 的空间不够,则会引起 buffer overflow。 strcpy 常规的实现代码如下:char * strcpy(char *to, const char *from){原创 2016-07-07 11:38:16 · 368 阅读 · 0 评论 -
(C)理解 #define write(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b))
1. 理解嵌入式系统编程,要求程序员能够利用C语言访问固定的内存地址。 既然是个地址,那么按照C语言的语法规则,这个表示地址的量应该是指针类型。所以,知道要访问的内存地址后,比如0x57000040(这儿的addr就是内存地址0x57000040) 第一步是要把它强制转换为指针类型 (unsigned int*)(0x57000040);所以0x57000040强制转换为指向unsigned原创 2016-07-07 11:12:52 · 1555 阅读 · 0 评论 -
(C)*p++和*++p区别
通过示例彻底理解自增运算符的两种用法(自减的用法与之类似,只不过是加1变成了减1)。转载 2015-04-10 16:30:44 · 653 阅读 · 0 评论 -
(C/C++)register关键字
register:这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中,而不是通过内存寻址访问,以提高效率。转载 2015-07-03 13:48:29 · 774 阅读 · 0 评论 -
(C)字节对齐#pragma pack()
为什么要进行对齐对于结构体,编译器会自动进行成员变量对齐处理,是为了提高运算效率。 缺省情况下是自然对齐方式。自然对齐即默认对齐,按照结构体的成员中size最大的成员进行对齐。 例:struct naturalalign{ char a; short b int c;};上述结构体,成员size最大的是c,sizeof(c)为4,因此,结构体中的成员都以4为单位进行对原创 2015-07-22 12:48:10 · 466 阅读 · 0 评论 -
(C/C++)struct结构体
对程序员的经验进行评估可以通过看其对struct结构体的使用情况。 会不会用struct,怎样使用struct,是区别一个开发人员是否具备丰富开发经历的标志。 在嵌入式系统的C/C++代码编程中,经常要传送的不是简单的字节流(char型数组),而是多种数据组合起来的一个整体,表现形式就是结构体。而经验不足的开发人员使用char型数组,通过指针偏移的方式进行报文传送。这样做一编写复杂,出错率高,可原创 2015-07-22 14:59:33 · 556 阅读 · 0 评论 -
(C)do{...}while(0);的用法及意义
linux内核和其他一些开源的代码中,经常会遇到这样的代码:do{ ...}while(0)这样的代码一看就不是一个循环,do..while表面上在这里一点意义都没有,那么为什么要这么用呢?实际上,do{…}while(0)的作用远大于美化你的代码。原创 2016-03-18 10:25:22 · 563 阅读 · 0 评论 -
(C++)inline关键字
背景(C&C++中) inline关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。转载 2016-03-21 10:33:47 · 292 阅读 · 0 评论 -
(C)结构数组
对于大小相同但是类型不同的数组,定义结构体数组对其很有帮组.例如: char *keyword[NKEYS]; int keycount[NKEYS];这两个数组大小相同,因此 可以用另一种不同的组织方式,也就是结构数组.形如: struct key{ char *word; int count; }keytab[NKE原创 2016-07-07 11:59:18 · 826 阅读 · 0 评论