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个不怎么常见的...)