inline函数为什么最好要添加static

来源:互联网 发布:淘宝买家退款率从哪看 编辑:程序博客网 时间:2024/06/11 06:09
测试:
测试文件:show.h,  main.c, printf.c
测试文件说明:
1)show.h:定义了void foo(void) inline函数
2)main.c:不包含show.h头文件,但声明了void show()原型
3)show.c:包含show.h头文件;并且有对foo函数的调用;

测试文件内容:

//show.h
#include<stdio.h>

static inline void show()
{
    printf("%s\n", __func__);
}
                                
//main.c
#include<stdio.h>

void show();

int main()
{
    show();
    return 0;
}

//printf.c
 #include "show.h"
 
 void print_fun()
 {
     show();
 }


测试结果:
1)如果show.h中对show() 函数的定义,没有使用static,则链接编译成功
2)如果show.h中对show()函数的定义,使用了static ,则连接时出错
错误提示:
         main.c:(.text+0xa): undefined reference to `show'
         collect2: error: ld returned 1 exit status


结论:
如果inline函数没有使用static关键字,则函数可以通过extern而不用包含声明inline函数的头文件就可以实现对inline函数的调用,显然很容易引起隐藏性错误,但链接器却不会给出错误哪怕是警告;所以inline函数最好声明为static类型,这样即使有错也会给出错误提示,代码可维护性也比较好。
0 0
原创粉丝点击