[英]How to mimic the “multiple instances of global variables within the application” behaviour of a static library but using a DLL?
[英]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
因此,显然,全局变量“幸存”了函数调用,这与我在可执行文件中实现 foo 并多次调用该可执行文件不同,全局变量每次都将设置为零。
问题:全局变量在上面使用的静态库中存在多长时间? 只要调用可执行的main
函数即可? 甚至允许这样做吗?
您可以认为全局变量在进入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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.