static函数与普通函数的区别:
1. 用static修饰的函数,限定在本源码文件中使用,不能被本源码文件以外的代码文件调用。
2. 普通的函数,默认是extern的,也就是说,可以被其它代码文件调用该函数。
若在函数的返回类型前加上关键字static,函数就被定义成为静态函数。普通 函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。因此定义静态函数有以下好处:
1. 其他文件中可以定义相同名字的函数,不会发生冲突。
2. 静态函数不能被其他文件所用。
如果在其它文件调用该static定义的函数,编译器则提示:
//假设:
//A.c文件中定义:
static void SofTool_CN(void)
{
//...
}
B.c文件直接调用A.c文件中的该函数:
SofTool_CN();
// 此时如果没有加extern,提示错误:
Error : armlink: L6218: Undefined symbol SofTool_CN (referred from B.o).
Error : link exit status = 2
// 如果像普通函数声明:
extern static void SofTool_CN(void);
//再调用:
SofTool_CN();
//提示错误:
Error : #114: function "SofTool_CN" was referenced but not defined
B.c line 216 static void SofTool_CN(void);
Error : armcc Compile exit status = 2