C++中, 函数的返回值可以是static形式的吗

例如 static int func(int a, int b);可以有这种写法吗? static 代表什么意思?
2025-04-25 15:56:58
推荐回答(2个)
回答1:

函数名前加static是内部函数,作用域局限在定义函数的文件内(在其他文件就不能调用此函数了)。
函数名前加extern 是外部函数,作用域扩展到定义函数的文件外(在其他文件也可以调用此函数)。


  1. static 表明修饰的函数的作用域是本文件.
    2.通常我们将只会在本文件中使用的函数定义为static,这样可以避免可能的命名冲突.同时将带来一个好处,那就是"错误局部化",便于查错.
    3.正因为我们只在这一个文件内使用,所以我们通常在CPP文件的头部声明,而不会把它放在在H文件中.
    4.我们通常不会#include CPP文件,(有时在碰到模板时例外),而是#include H 文件.

    举例来说在SDK情况下,我有一个父窗口,下面管理着20个子窗口,在子窗口的WNDPROC中都一个函数叫OnInitDiaog()处理相应的WM_INITDIALOG消息.每个子窗口的WNDPROC都在一个单独的CPP文件中.如果我声明其为static,则所有的函数都可以叫做OnInitDialog(),否则就得改成Dialog1_OnInitDialog(), Dialog2_OnInitDialgo().... Dialog20_OnInitDialog(),你说烦不烦?


假设你写了一个LIB(假设是STATIC LIB),你希望你的用户用f1(),f2()两个函数,因此你给了他们一个头文件,里面只有这两个函数的声明,你想我把其他的细节都黑箱化的,用户看不到,应该不会有问题了,但在你的LIB中有一个g(),它只能被f1()或f2()调用.但用户不知道,因为他拿到头文件中没有,而LIB是个二进制文件.更何况你也不希望他知道你的g()函数,因为那完全是私有的.

用户使用你的LIB,在他的程序中他写了一个函数g(),他和你一样不用static,他编译无误,链接时出错了,因为有两个g(),用户十分纳闷,他只看见了自己的g().

采用static就可避免上述情况.

回答2:

函数名前加static 内部函数
作用域局限在定义函数的文件内(在其他文件就不能调用此函数了)

函数名前加extern 外部函数
作用域扩展到定义函数的文件外(在其他文件也可以调用此函数)