静态库中的全局变量可以使用多长时间?

假设我有以下用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

因此,很明显,全局变量“幸存”了函数调用,这与我在可执行文件中实现foo并多次调用该可执行文件不同,全局变量每次都将设置为零。

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

kakalb 回答:静态库中的全局变量可以使用多长时间?

您可以想到全局变量在输入main()之前被初始化,而在main()退出之后被销毁。

实际规则稍微复杂一些,但在大多数最简单的情况下(涵盖您)。


在这种情况下,您所指的是全局变量,实际上是带有“全局范围”的“静态存储持续时间对象”。

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

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;
}
本文链接:https://www.f2er.com/2974946.html

大家都在问