学习C、查阅C基本语法好去处:C 语言教程 | 菜鸟教程
嵌入式C的好习惯:
①、常量定义为大写字母形式
②、在指针变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。
数据类型:
各数据类型取值范围:
1、数据的 移位、置1、清0、取反
移位 :??>>x ??右移x位
例如:x=PB_IDR>>2&0x01怎么理解?
PB_IDR>>2是将PB_IDR中的数据右移两位,&0x01是求与,这样x即为PB引脚2的状态
置1: a |=(1<<x); a的第x位置1
清0:a &= ~(1<<x); a的第x位清0
取反:a^=(1<<x); a的第x位取反
2、 结构体 struct
结构体类似于面向对象语言中的属性类的定义,是用户自己定义的数据结构。
结构体定义方法:
①、 struct 结构体名
{
成员列表;
};
struct 结构体名 变量名;
-----------------------------------------------------
②、 struct 结构体名
{
成员列表;
}变量名;
----------------------------------------------------
③、 struct //没有结构体名
{
成员列表;
}变量名;
结构体变量的使用形式:
结构体变量名
.
成员名
结构体指针:
要知道,指针就是地址,那结构体指针就是结构体首地址。
而指针变量是存放地址的容器,结构体指针变量是存放结构体的首地址容器。
struct 结构体名 *结构指针名;
访问其中一个结构体元素的成员变量
结构体指针名
->
成员名
等同于
(
*
结构体指针名)
.
成员名
3. extent
变量的声明有两种情况:
1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。
2、另一种是不需要建立存储空间的,通过使用extern关键字声明变量名而不定义它。 例如:extern int a 其中变量 a 可以在别的文件中定义的。
extern int i; //声明,不是定义
int i; //声明,也是定义
如果需要在一个源文件中引用另外一个源文件中定义的变量,我们只需在引用的文件中将变量加上 extern 关键字的声明即可。
4.常量格式:
整数常量
整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。
整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。后缀可以是大写,也可以是小写,U 和 L 的顺序任意。
下面列举几个整数常量的实例:
212 /* 合法的 */
215u /* 合法的 */
0xFeeL /* 合法的 */
078 /* 非法的:8 不是八进制的数字 */
032UU /* 非法的:不能重复后缀 */
以下是各种类型的整数常量的实例:
85 /* 十进制 */
0213 /* 八进制 */
0x4b /* 十六进制 */
30 /* 整数 */
30u /* 无符号整数 */
30l /* 长整数 */
30ul /* 无符号长整数 */
浮点常量
浮点常量由整数部分、小数点、小数部分和指数部分组成。您可以使用小数形式或者指数形式来表示浮点常量。
当使用小数形式表示时,必须包含整数部分、小数部分,或同时包含两者。当使用指数形式表示时, 必须包含小数点、指数,或同时包含两者。带符号的指数是用 e 或 E 引入的。
下面列举几个浮点常量的实例:
3.14159 /* 合法的 */
314159E-5L /* 合法的 */
510E /* 非法的:不完整的指数 */
210f /* 非法的:没有小数或指数 */
.e55 /* 非法的:缺少整数或分数 */
转义字符
5. 嵌入C语言 预处理
==预处理==命令可以改变程序设计环境,提高编程效率,
它们并不是 C 语言本身的组成部分,不能直接对 它们进行编译,必须在对程序进行编译之前,先对程序中这些特殊的命令进行“预处理” 。
经过预处理后,程序就不再包括预处理命令了,最后再由编译程序对==预处理==之后的源程序进行==编译==处理,得到可供执行的目标代码。
所有的预处理器命令都是以井号(#)开头。
C 语言提供的预处理功能有三种,分别为==宏定义==、文件包含和条件编译。
//========宏定义=========================
#define MAX 10 // 宏定义
#ifdef // 如果宏已经定义ÿ