C语言学习笔记

发布时间:2014-10-22 14:11:10编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"C语言学习笔记",主要涉及到C语言学习笔记方面的内容,对于C语言学习笔记感兴趣的同学可以参考一下。

1、register关键字,声明为寄存器变量,这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中而不是通过内存寻址,这样提高访问效率。ARM处理器通用寄存器R0-R15,定义太多register变量不可能全部分配到寄存器使用。       register使用的限制,必须是单个的值,并且其长度应小于或等于整形的长度。而且register变量可能不存放在内存中,所以不能用&来取其地址。 2、volatile 关键是,说明变量在程序执行中可被隐含地改变。告诉编译器不对该变量进行编译优化,保证数据的稳定访问,每次都重新从内存中读取该值。用于多个线程访问的数据或者一个端口数据,容易出现问题,用volatile可以保证对特殊地址的稳定访问。一般在驱动开发中常见。 volatile应该解释为“直接存取原始内存地址”比较合适 volatile定义之后,其实这个变量就不会因外因而变化了,可以放心使用了 网上搜罗的例子: 1). 并行设备的硬件寄存器(如:状态寄存器) 2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) 3). 多线程应用中被几个任务共享的变量 遗留问题, 一个参数既可以是const还可以是volatile吗?如const volatile int i = 10; 回答:是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。 宏定义使用例子,寄存器定义 #define rURXH0 (*(volatile unsigned char *)0x50000024) //UART 0 Receive buffer 3、浮点数比较大小,使用精度范围 if((fTestVal >= -EPSINON) && (fTestVal <= EPSINON)); //EPSINON 为定义好的精度 EPSINON 为定义好的精度,如果一个数落在[0.0-EPSINON,0.0+EPSINON] 这个闭区间内,我们认为在某个精度内它的值与零值相等;否则不相等。扩展一下,把0.0 替换为你想比较的任何一个浮点数,那我们就可以比较任意两个浮点数的大小了,当然是在某个精度内。  4、:case 后面只能是整型或字符型的常量或常量表达式 5、柔性数组 C99 中,结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员,但结构中的柔性数组成员前面必须至少一个其他成员。柔性数组成员允许结构中包含一个大小可变的数组。(定义报文结构)


上一篇:继续我的代码,分享我的快乐 - WEBUS2.0 资源汇总
下一篇:oracle中 connect by prior 递归算法,connect_by_root,sys_connect_by_path,connect_by_isleaf,CONNECT_BY_ISCYC

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款