静态库中的全局变量有多长时间?
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;
}
假设我有以下用 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;
}