随笔分类 -  C

C语法学习,工具使用
摘要:程序控制块 1. 程序控制块 从代码上看,程序控制块就是一个结构体.例如: 操作系统可以通过这个结构体控制与之相关联的代码,因此把这种结构叫做程序控制块. 例子: c include include //TCB定义 typedef struct tcb{ char task_name; //任务名字 阅读全文
posted @ 2016-07-27 18:55 跑马灯的忧伤 阅读(2465) 评论(0) 推荐(0) 编辑
摘要:结构数组 对于大小相同但是类型不同的数组,定义结构体数组对其很有帮组.例如: 这两个数组大小相同,因此 可以用另一种不同的组织方式,也就是结构数组.形如: 因此两个数组用一个结构体数组即可定义. 阅读全文
posted @ 2016-07-27 18:53 跑马灯的忧伤 阅读(321) 评论(0) 推荐(0) 编辑
摘要:位字段(bit field) 在存储空间很宝贵的情况下,有可能需要将多个对象保存在一个机器字中,一种常用的方法是:使用类似于编译器符号表的单个二进制位标志集合,外部强加的数据格式(如设备接口等寄存器)经常需要从字的分值中读取数值. 通常采用的方法是:定义一个于相关位的位置对应的"屏蔽码"集合,如: 阅读全文
posted @ 2016-07-27 18:53 跑马灯的忧伤 阅读(343) 评论(0) 推荐(0) 编辑
摘要:结构体指针 指针结构与指针的关系亦有两重:其一是在定义结构时,将指针作为结构中的一个成员;其二是指向结构的指针(称为结构指针)。 前者同一般的结构成员一样可直接进行访问,后者是本节讨论的重点。 结构指针说明的一般形式是: struct (结构类型名称) * (结构指针变量名);例如:struct d 阅读全文
posted @ 2016-07-23 22:52 跑马灯的忧伤 阅读(10791) 评论(0) 推荐(0) 编辑
摘要:对于大小相同但是类型不同的数组,定义结构体数组对其很有帮组.例如: char *keyword[NKEYS]; int keycount[NKEYS]; 这两个数组大小相同,因此 可以用另一种不同的组织方式,也就是结构数组.形如: struct key{ char *word; int count; 阅读全文
posted @ 2016-07-07 11:59 跑马灯的忧伤 阅读(166) 评论(0) 推荐(0) 编辑
摘要:在存储空间很宝贵的情况下,有可能需要将多个对象保存在一个机器字中,一种常用的方法是:使用类似于编译器符号表的单个二进制位标志集合,外部强加的数据格式(如设备接口等寄存器)经常需要从字的分值中读取数值. 通常采用的方法是:定义一个于相关位的位置对应的”屏蔽码”集合, 如: #define KEYWOR 阅读全文
posted @ 2016-07-07 11:57 跑马灯的忧伤 阅读(439) 评论(0) 推荐(0) 编辑
摘要:1. 特点 非goto语句在函数内实施跳转,而是在栈上跳过若干调用帧,返回到当前函数调用路径上的某一语句. 头文件包含#include Void longjmp(jmp_buf env,int val); 返回值:若直接调用则返回0,若从longjmp调用返回则返回非0值 注: setjmp参数ev 阅读全文
posted @ 2016-07-07 11:56 跑马灯的忧伤 阅读(247) 评论(0) 推荐(0) 编辑
摘要:1. 作用 volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。 如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。 下 阅读全文
posted @ 2016-07-07 11:52 跑马灯的忧伤 阅读(247) 评论(0) 推荐(0) 编辑
摘要:1. 背景 好多人已经知道利用strncpy替代strcpy来防止缓冲区越界。 但是如果还要考虑运行效率的话,也许strlcpy是一个更好的方式。 2. strcpy strcpy 是依据 /0 作为结束判断的,如果 to 的空间不够,则会引起 buffer overflow。 strcpy 常规的 阅读全文
posted @ 2016-07-07 11:38 跑马灯的忧伤 阅读(225) 评论(0) 推荐(0) 编辑
摘要:背景(C&C++中) inline关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。 表达式形式的宏定义如: #define ExpressionName(Var1,Var2) ((Var1)+(Var2))*((Var1)-(Var2)) 取代这种形式的原因如下: 阅读全文
posted @ 2016-03-21 10:33 跑马灯的忧伤 阅读(369) 评论(0) 推荐(0) 编辑
摘要:实际上,do{…}while(0)的作用远大于美化你的代码。 总结起来这样写主要有以下几点好处: 1. 辅助定义复杂的宏 避免引用的时候出错: 举例来说,假设你需要定义这样一个宏: #define DOSOMETHING()\ foo1();\ foo2(); 这个宏的本意是,当调用DOSOMETH 阅读全文
posted @ 2016-03-18 10:25 跑马灯的忧伤 阅读(343) 评论(0) 推荐(0) 编辑
摘要:问题 任意给定一个32位无符号整数n,求n的二进制表示中1的个数,比如n = 5(0101)时,返回2,n = 15(1111)时,返回4 这也是一道比较经典的题目了,相信不少人面试的时候可能遇到过这道题吧,下面介绍了几种方法来实现这道题,相信很多人可能见过下面的算法,但我相信很少有人见到本文中所有 阅读全文
posted @ 2015-12-30 15:39 跑马灯的忧伤 阅读(806) 评论(0) 推荐(0) 编辑
摘要:bss段: bss段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。 bss是英文Block Started by Symbol的简称。 bss段属于静态内存分配。 data段: 数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区 阅读全文
posted @ 2015-08-05 20:18 跑马灯的忧伤 阅读(69489) 评论(6) 推荐(13) 编辑
摘要:对程序员的经验进行评估可以通过看其对struct结构体的使用情况。 会不会用struct,怎样使用struct,是区别一个开发人员是否具备丰富开发经历的标志。 在嵌入式系统的C/C++代码编程中,经常要传送的不是简单的字节流(char型数组),而是多种数据组合起来的一个整体,表现形式就是结构体。而经 阅读全文
posted @ 2015-07-22 14:59 跑马灯的忧伤 阅读(257) 评论(0) 推荐(0) 编辑
摘要:1. 为什么要进行对齐 对于结构体,编译器会自动进行成员变量对齐处理,是为了提高运算效率。 缺省情况下是自然对齐方式。 2. 自然对齐 即默认对齐,按照结构体的成员中size最大的成员进行对齐。 例: struct naturalalign { char a; short b int c; }; 上 阅读全文
posted @ 2015-07-22 12:48 跑马灯的忧伤 阅读(229) 评论(0) 推荐(0) 编辑
摘要:register:这个关键字的作用是请求编译器尽可能的将变量存在CPU内部寄存器中,而不是通过内存寻址访问,以提高效率。 注意是尽可能,不是绝对.一个CPU 的寄存器也就那么几个或几十个,你要是定义了很多很多register 变量,它累死也可能不能全部把这些变量放入寄存器吧,轮也可能轮不到你。 1. 阅读全文
posted @ 2015-07-03 13:48 跑马灯的忧伤 阅读(420) 评论(0) 推荐(0) 编辑
摘要:接下来,通过示例彻底理解自增运算符的两种用法(自减的用法与之类似,只不过是加1变成了减1)。 1、++i和i++的区别 如清单1(注意代码中的注释): [cpp] view plaincopyprint? #include <stdio.h> int main(void) { int a, b, i 阅读全文
posted @ 2015-04-10 16:30 跑马灯的忧伤 阅读(542) 评论(0) 推荐(0) 编辑
摘要:理解 嵌入式系统编程,要求程序员能够利用C语言访问固定的内存地址。 既然是个地址,那么按照C语言的语法规则,这个表示地址的量应该是指针类型。 所以,知道要访问的内存地址后,比如0x57000040(这儿的addr就是内存地址0x57000040) 第一步,把它强制转换为指针类型: 注: volati 阅读全文
posted @ 2015-03-30 16:57 跑马灯的忧伤 阅读(741) 评论(0) 推荐(0) 编辑
摘要:背景(C&C++中) 一、inline关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。 表达式形式的宏定义一例:#define ExpressionName(Var1,Var2) ((Var1)+(Var2))*((Var1)-(Var2)) 取代这种形式的原因如下 阅读全文
posted @ 2015-03-30 15:11 跑马灯的忧伤 阅读(223) 评论(0) 推荐(0) 编辑
摘要:好多人已经知道利用strncpy替代strcpy来防止缓冲区越界。 但是如果还要考虑运行效率的话,也许strlcpy是一个更好的方式。 1. strcpy strcpy 是依据 /0 作为结束判断的,如果 to 的空间不够,则会引起 buffer overflow。strcpy 常规的实现代码如下: 阅读全文
posted @ 2015-03-19 11:10 跑马灯的忧伤 阅读(2949) 评论(0) 推荐(1) 编辑

点击右上角即可分享
微信分享提示