静态库中的全局变量有多长时间?

How long live global variables in a static library?

假设我有以下用 C++ 实现的静态库:

int global = 0;

extern int foo(int i)
{
    global += i;
    return global;
}

我在我的项目中使用如下:

#include <iostream>

extern int foo(int i);

int main()
{
    std::cout << foo(1) << "\n";
    std::cout << foo(1) << "\n";
    std::cout << foo(1) << "\n";
}

这段代码打印出来:

1
2
3

所以,显然,全局变量 "survives" 函数调用,与我在可执行文件中实现 foo 并多次调用该可执行文件不同,每次都会将全局变量设置为零。

问题:全局变量在上面使用的静态库中存在多长时间?只要调用可执行文件的main函数?甚至允许这样做吗?

你可以认为全局变量在进入main()之前初始化,在main()退出之后销毁。

实际规则稍微复杂一些,但在像这样的大多数简单情况下都可以满足您的要求。


在这种情况下,您所说的全局变量实际上是 "static storage duration object" 和 "global scope"。

还有其他静态存储持续时间对象的示例。

extern int foo(int i)
{
    static int global = 0;   // marking this static inside a function
                             // makes it a static storage duration
                             // object that lives longer than the function.

    global += i;
    return global;
}