转自http://blog.chinaunix.net/uid-22160801-id-3429602.html
-------------------------------
在c中,为了解决一些频繁调用的小函数大量消耗栈空间或是叫栈内存的问题,特别的引入了inline修饰符,表示为内联函数。
1、inline函数仅仅是一个建议,对编译器的建议,所以最后能否真正内联,看编译器的意思,它如果认为函数不复杂,能在调用点展开,就会真正内联,并不是说声明了内联就会内联,声明内联只是一个建议而已.
2、因为内联函数要在调用点展开,所以编译器必须随处可见内联函数的定义,要不然,就成了非内联函数的调用了.所以,这要求每个调用了内联函数的文件都出现了该内联函数的定义。因此,将内联函数放在头文件里实现是合适的,省却你为每个文件实现一次的麻烦.而所以声明跟定义要一致,其实是指,如果在每个文件里都实现一次该内 联函数的话,那么,最好保证每个定义都是一样的,否则,将会引起未定义的行为,即是说,如果不是每个文件里的定义都一样,那么,编译器展开的是哪一个,那 要看具体的编译器而定.所以,最好将内联函数定义放在头文件中.
下面我们来看一个例子
- #include <stdio.h>
- //函数定义为inline即:内联函数
- inline char* dbtest(int a) {
- return (i % 2 > 0) ? "奇" : "偶";
- }
- int main()
- {
- int i = 0;
- for (i=1; i < 100; i++) {
- printf("i:%d 奇偶性:%s /n", i, dbtest(i));
- }
- }