我想要一个全局的 names
变量,看起来像这样
char* names[NAMES_CAP];
int names_len = 0;
而且我希望链接到该库的每个人都能够向该列表添加一个项目。
从 main
很容易做到这一点。
int main(int argc,char**argv) {
names[names_len++] = "new name";
names[names_len++] = "new name 2";
}
但是如果我想叠加两个库怎么办? (即,我的库 libnames
保存全局变量。如果有人链接到使用 libnames
的 libnameuser
,它将自动添加所有定义的名称在 libnameuser
到 libnames
中的 names
数组。
有什么办法吗?
在 C++ 中,我可以将 names[names_len++] = "..."
插入到全局对象的构造函数中,并且必须调用它。但是我可以用纯 C 来实现吗?
最佳答案
如果您使用的是 gcc,则可以使用构造函数属性 __attribute__((constructor))
得到同样的效果。然而,这是非标准的 C。
但是我不建议使用这种模式,因为无法控制在 main 之前运行的任何函数的顺序。我宁愿找到一种在 main 开始运行后 Hook 所有“构造函数”函数的好方法。
关于c++ - 模仿C中静态对象的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7848790/