测试:
测试文件: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();
}
测试文件内容:
//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
错误提示:
main.c:(.text+0xa): undefined reference to `show'
collect2: error: ld returned 1 exit status
结论:
如果inline函数没有使用static关键字,则函数可以通过extern而不用包含声明inline函数的头文件就可以实现对inline函数的调用,显然很容易引起隐藏性错误,但链接器却不会给出错误哪怕是警告;
所以inline函数最好声明为static类型,这样即使有错也会给出错误提示,代码可维护性也比较好。