static 静态函数

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中。

猜你喜欢

转载自blog.csdn.net/qq_30460949/article/details/127100786
今日推荐