预处理宏定义

编译过程:

1.预处理

        预编译:执行代码中的预处理命令,生成一个只包含的.c文件

2.编译

        对于语法进行检查,将c源代码变成汇编语言

3.汇编

        将汇编代码生成机器代码

4.链接

        将使用的代码链接到一起,最终生成可执行文件

宏定义:

#define 宏名 宏值

#define N 10

注意:

1.预处理命令都是以# 开头的

2.宏名和之前的命名规则一致

3.宏名一般大写,用来区分普通变量

4.预处理实际上是将宏名用宏值替换//文本替换5

        c语言字符串中出现的“宏名”不会被替代

5.应用:

        提高代码可读性

        一改全改方便代码修改

6.作用域

# undef N //取消宏名的定义

发挥宏定义的作用范围从#define开始到#undef之间

带参宏定义://宏函数

语法:

#define 宏名(参数) 宏值

eg:#define ADD(a,b) a+b

注意:

带参宏和函数有本质的区别:

1.处理阶段不一样

宏定义:预处理阶段

函数:编译阶段

2.使用不一样

宏:预处理阶段就使用结束

        宏的使用本质上是文本的原样替换

        宏的参数,只进行文本替换,不进行语法检验

函数:调用时进行使用

        函数的使用本质上是函数代码的调用

        函数的参数是有类型的,编译阶段是要进行类型检查的

宏的应用

        对于一般的简短代码,考虑写成带参宏(不需要保存现场,还原现场,优势劣势都有)

宏的副作用:

        处理:

                把能加括号的地方都加括号

\为续航符

文件包含

#include<文件名>

#include"文件名"

<> 与 ""的区别:

查找头文件的方式不一样

<>:到系统默认路径找头文件

"":先到当下目录下找,如果没有,再到系统默认路径找头文件

条件编译:

(1)#ifdef 标识符

        程序段1

#else

        程序段2

#endif

含义:

如果定义了标识符

则预处理程序段1//保留程序段1的代码

否则保留程序2

(2)ifndefine

程序段1

#else

程序段2

#endif

含义:

如果没定义了标识符

则预处理程序段1//保留程序段1的代码

否则保留程序2

(3)#if 表达式

        程序段1

#else

        程序段2

#endif

含义:

表达式为真保留程序段1,否则保留表达式2

用途:

调试的开关

指针:

指针就是地址,地址就是 内存单元的编号

指针也是一种数据类型,这种数据类型专门用来处理地址这种数据

语法:

基类型 * 指针变量名

1.基类型

整型...结构体类型,指针类型

表示指针指向的地址空间存放的是基类型的数据

2.*

表示此时定义的是一个指针数据类型变量

3.指针变量名

按照规则命名

指针变量的引用:

int a = 10;

int *p = &a;

* //指针运算符

 //单目运算

 //预算对象只能是指针(地址)

*p表示访问 p所指向的基类型的内存空间的内容

int a;

int *p;

*p = &a; //&a 的数据类型是 int *

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值