预处理相关命令
1、头文件包含
#include<xxx.h>;去系统默认路径下找该.h文件。
#include“xxx.h”;现在当前路劲下找.h文件,找不到再去默认路径下找该.h文件
2、宏定义
格式1:#define PI 3.1415926
特点为原样替换,对计算机而言:在预处理阶段,用宏体替换宏名;
举例:
#define P_INT int*
那么P_INT a,b,其中a的数据类型是:int*,b的是int。
补充
typedef
功能:类型重定义,给数据类型起别名
格式:typedef 原来的数据类型, 新的名字
struct Tag{
成员;
};
typedef struct tag Tag;
Tag num; num: truct tag
举例: typedef int * P_INT;
P_INT a,b;
a的数据类型:int*
b的数据类型:int*
格式2:#define 宏明
#define NUM 定义该宏, 叫 NUM
一般和下边的配合用:
#define NUM 定义一个宏: 叫 NUM
#ifdef NUM 如果 NUM 这个宏已经被定义, 编译下面的
代码片段
#endif
#define NUM 定义一个宏: 叫 NUM
#ifndef NUM 如果 NUM 这个宏没有被定义, 编译下面的
代码片段
#endif
预处理指令( 条件编译) :
指令 | 说明 |
# | 空指令, 无任何效果 |
包含一个源代码文件 | |
#define | 定义宏 |
#undef | 取消已定义的宏 |
#if | 如果给定条件为真, 则编译下面代码 |
#elif | 如果前面的#if 给定条件不为真, 当前条件为真, 则编译下面代码( 类似于 else if) |
#else | 结合#if 使用, 类似 else |
#ifdef | 如果宏已经定义, 则编译下面代码 |
#ifndef | 如果宏没有定义, 则编译下面代码 |
#endif | 结束一个#if……#else 条件编译块 |
3、关键字
全局变量:
生命周期:从定义处开始,到当前.c结束
作用范围:从定义处开始,到当前.c结束
extern
1-->extern修饰全局变量,表示借用外部的,外来的
格式:extern数据类型,变量名;
注意:定义的时候不能给变量赋值
2-->extern 修饰函数:借用外部的,外来的;
格式:extern 函数声明;
static
方式 1: 修饰局部变量 延长生命周期
方式 2: 修饰全局变量--私有化--不借
方式 3: 修饰函数 -- 私有化 -- 仅在当前.c 中使用
4、模块化编程
任意工程/项目, 有且仅有一个 main 函数, 程序执行一定是从 main 函数开始, 终止于 main 函
数;
一个项目/工程: 通常有 1 个 main 函数, 和多个功能函数组成, 为了方便管理, 一般每个功能
会有一个单独的.c, 也会给每个.c 配备一个.h 文件;
.c: 变量的定义, 函数的定义( 函数执行功能的过程)
.h: 头文件包含, 宏定义, 数据类型的定义, 函数的声明, 枚举
.c 的格式:
#include “自身的.h”
函数的功能
.h 的格式:
#ifndef 宏名 //如果该宏名没有被定义
#define 宏名 //定义该宏
。 。 。 。
#endif //结束
三行预处理指令的功能: 防止头文件, 重复编译。
5、位运算符
主要是针对二进制数的运算符:&|^<<>>~
数值 1 数值 2 & | ^( 结果)
1 1 1 1 0
1 0 0 1 1
0 1 0 1 1
0 0 0 0 0
已知数值 1, 已知结果, 求数值 2;
&0 清 0, &1 保持不变;
|1 置 1, |0 保持不变;
^1 取反, ^0 保持不变;
例 1: unsigned char num = 51; //0011 0011
期待经过某种操作, 第 4 位清 0, 其他位保持不变; //0010 0011
num = num & 1110 1111
1110 1111: ~( 0001 0000) == ~( 1<<4)
num &= ~( 1<<4) ;
例 2: unsigned char num = 51; //0011 0011
第三位置 1: 期待的结果 0011 1011
num = num | 0000 1000 = 0011 1011
num |=( 1<<3) ;
例 3: unsigned char num = 51; //0011 0011
第五位取反: 期待的结果 0001 0011
num = num ^ 0010 0000
num ^= (1<<5);
总结:
第 n 位清 0: num &= ~(1<<n);
第 n 位置 1: num |= (1<<n);
第 n 位取反: num ^= (1<<n)