NDK02_C:宏、宏函数和内联函数

NDK开发汇总

一 宏

预处理器是一个文本替换工具

宏就是文本替换

//宏一般使用大写区分
//宏变量
//在代码中使用 A 就会被替换为1
#define A 1
//宏函数
#defind test(i) i > 10 ? 1: 0

//其他技巧
// # 连接符 连接两个符号组成新符号
#define DN_INT(arg) int dn_ ## arg
DN_INT(i) = 10;
dn_i = 100;

// \ 换行符
#define PRINT_I(arg) if(arg) { \
 printf("%d\n",arg); \
 }
PRINT_I(dn_i);

//可变宏
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,"NDK", __VA_ARGS__);

//陷阱
#define MULTI(x,y)  x*y
//获得 4
printf("%d\n", MULTI(2, 2));
//获得 1+1*2  = 3
printf("%d\n", MULTI(1+1, 2));

二 宏函数

​ 优点:

​ 文本替换,每个使用到的地方都会替换为宏定义。

​ 不会造成函数调用的开销(开辟栈空间,记录返回地址,将形参压栈,从函数返回还要释放堆

​ 栈。)

​ 缺点:

​ 生成的目标文件大,不会执行代码检查

三 内联函数

​ 和宏函数工作模式相似,但是两个不同的概念,首先是函数,那么就会有类型检查同时也可以debug
在编译时候将内联函数插入。

不能包含复杂的控制语句,while、switch,并且内联函数本身不能直接调用自身。
如果内联函数的函数体过大,编译器会自动的把这个内联函数变成普通函数。

拓展:手写sprintf

根据可变参数、指针运算等知识自己实现 sprintf 函数(只实现 %d 就行)!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值