嵌入式成长之路C语言宏定义学习

本文详细介绍了C语言中的宏定义,包括常量宏、宏函数以及宏拼接,强调了宏定义的注意事项和预处理阶段的替换规则。同时,讲解了动态内存管理,阐述了malloc和free函数的使用,强调了内存泄漏和野指针的问题,并提醒程序员在分配和释放内存时的正确做法。
摘要由CSDN通过智能技术生成

1.常量宏定义
#define TI 3.14
#define M 3
#define N 4
#define ADD ((M)+(N))

1>宏定义在预处理阶段进行替换
2>宏定义中有复杂的表达式,要多多使用()
3>在进行宏定义时,默认是不允许出现换行,如果需要需要在末尾添加换行符 \

2.使用宏函数,最后一个表达式的结果作为宏函数的返回值
#define MAX(a,b) ({a>b?a:b;}) 宏函数多用于底层封装时
例子:
#include<stdio.h>
//定义函数
#define MAX(a,b) ({(a) > (b) ?(a) : (b) ;})
#define MIN(a , b ) ({int ret;
if(a>b)
ret = b;
else ret = a;
ret; })
int main(int argc , const char argv[])
{
int max =MAX(100,50);
printf(“max = %d\n”,max);
int min = MIN(100 , 50);
printf(“min = %d\n”,min);
return 0;
}
3.宏定义使用##进行两个宏定义参数的拼接
4.宏定义的预定义
//当行注释
/**/ 多行注释,不可以嵌套
#if 0/1 #else #endif 多行注释
二、动态分配内存
总结:
1.在程序中可以动态指定本次分配内存的大小
2.malloc分配的内存在堆区
3.malloc分配的内存是连续的,可以通过数组的格式访问内存中的数据p=(int
)malloc(sizeof(int)*10);在堆区分配40个字节的空间,并且是连续的。
4.malloc申请的内存需要free释放,如果在一个一直运行的程序中,反复调用malloc,但是没有调用free就会导致"内存泄漏"。如果malloc申请的内存没有调用free,但是程序执行结束了,内存会被操作系统释放掉。
5.malloc申请的内存在释放的时候,一定使用的是从首地开始的内存。free函数调用之后一定要将指针执向NULL,否则在使用这个指针的时候就是在使用"野指针"如果释放堆区的空间没有执向NULL,则这个指针已让可以使用,并且编译不会报错,当时使用了非法的内存空间,别人再次malloc时这块空间又可能会被重新分配,执行也不会报错,但是程序的运行结果为止。如果释放堆区的空间没有指向NULL,就会出现野指针。如果释放堆区的空间,并且释放之后将指针指向NULL,此时这个指针依然可以使用,编译器不会报错,但是指向时会报段错误(核心已转储).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值