单片机中C语言少见的类型 大杂烩

7 篇文章 0 订阅

C语言编程过程中,有很多少见的类型,现在在这里做个汇总,加深印象;

 

1.             __类型  ( __IO、__O)

 __IO一般是  volatile      表示可读可写

volatile 就是为了禁止编译器对其优化。

在cortex-M3内文件中,就这样定义,如下:

2.   inline  内联修饰符 

在c/c++中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline修饰符,表示为内联函数。

可能看了上面的定义,你就知道了:内联函数就是节省栈空间!

 

但是具体是怎么实现呢?

还有我们都知道,每次调用函数都是有消耗,具体消耗了什么,请看下面的博客:

https://www.cnblogs.com/second-tomorrow/p/9294427.html

大致内容就是:

所以,简单的说,内联函数就是相当于你直接把语句写入到了函数了,虽然你调用的是函数形式;这样,你就节省了栈空间了;但是它还有很多局限,比如不能在函数里调用递归,不能用while,switch之类的;最重要的就是,他得看他老大——编译器的意思;并不是声明了内联就一定内联;声明内联只是个建议;具体还得看编译器的意思;

再拿个简单的例子:

你定义了一个函数,函数里是你没写,当你运行后,是不是每次调用这个空函数都会开销一点栈空间?所以,编译器很聪明,把空函数直接声明称内联函数,这样就省去了内存的开销;(即,缺省的函数都是内联函数。(我说的,不知道对不对,欢迎指正,原话:定义在类中的成员函数缺省都是内联的))

 

这是内联函数的简单例子:

https://www.cnblogs.com/fnlingnzb-learner/p/6423917.html 

 

最后:

内联是以代码膨胀(复制为代价,仅仅省去了函数调用的开销,从而提高函数的执行效率。 

所以那种长代码就不要用内联,那种很短且常用的可以考虑内联,但是有时也会因为编译器的不同,可能结果不尽如人意;

 

未完待续....(暂时就找到这2个不怎么常见的...)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值