c++ - 模仿C中静态对象的构造函数

标签 c++ c constructor

我想要一个全局的 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 保存全局变量。如果有人链接到使用 libnameslibnameuser,它将自动添加所有定义的名称在 libnameuserlibnames 中的 names 数组。

有什么办法吗?

在 C++ 中,我可以将 names[names_len++] = "..." 插入到全局对象的构造函数中,并且必须调用它。但是我可以用纯 C 来实现吗?

最佳答案

如果您使用的是 gcc,则可以使用构造函数属性 __attribute__((constructor))得到同样的效果。然而,这是非标准的 C。

但是我不建议使用这种模式,因为无法控制在 main 之前运行的任何函数的顺序。我宁愿找到一种在 main 开始运行后 Hook 所有“构造函数”函数的好方法。

关于c++ - 模仿C中静态对象的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7848790/

相关文章:

c++ - 将 XCTest 单元测试添加到现有应用程序不起作用

c++ - 由于编译时计算值,如何避免 "unreachable statement"?

c++ - 带有 unique_ptr 的前向声明?

c - 从返回指针的函数读取值

c++ - 用友元类重载构造函数

c++ - 运算符重载使用operator +作为类模板

c - 如何比较两个字符串并返回相同单词的数量?

c - gcc 的 -fstack-protector 选项如何防止堆栈崩溃?

c++ - 首次使用对象后调用的全局对象构造函数

c++ - 如何禁止简单的赋值 MyClass=int?