a.h
static void fun();
a.cpp
main.cpp
#include "a.h"
int main()
{
fun();
return 1;
}
出现已声明未定义。
error C2129: 静态函"void fun(void)"已声明但未定义 [E:lown_projectloutlbuildlown_projectlown_project.vcxproj]
a.h
static void fun();
a.cpp
static void fun()
{
}
main.cpp
#include "a.h"
int main()
{
fun();
return 1;
}
出现已声明未定义。
error C2129: 静态函"void fun(void)"已声明但未定义 [E:lown_projectloutlbuildlown_projectlown_project.vcxproj]
a.h
static void fun()
{
}
a.cpp
main.cpp
#include "a.h"
int main()
{
fun();
return 1;
}
编译通过。
这里有头文件a.h,源文件a.cpp、main.cpp。由于static只在所在文件中可见。故包含该文件的文件也可见到。故在a.h直接定义该函数,在main.cpp包含a.h时可以编译通过。
相当于
a.h
static void fun()
{
}
a.cpp
main.cpp
#include "a.h"
int main()
{
fun();
return 1;
}
///
//将#include "a.h"翻译成
static void fun()
{
}
main.cpp //将变成
static void fun()
{
}
int mian()
{
fun();
return 1;
}
备注:
a.h每被包含一次都有不同的地址,故可以无限次包含而不会产生冲突。
因此使用static函数可以使函数重名。
综上:如果某个函数只在某个cpp中使用,并且不希望将这个函数暴露给外界,那么就应该将它定义为static函数,定义在cpp中。