在一个文件中,我有一个结构,如...
struct t {
int private;
int public;
};
struct t s;
让其他目标文件能够访问 s.public
的一种方法是将...
struct t {
int private;
int public;
};
extern struct t s;
...放入头文件中,让其他文件引用 s.public
。
我想避免这种情况,因为它会锁定引用 的任何目标文件中
.这意味着如果我在 s
的基数和 public
的基数之间的偏移量s.publicprivate
之后添加新的 private2
,这些文件将有错误的 public
地址,这将需要重新编译。
相反,我想找到一种方法将符号 s.public
的位置导出为 s_public_direct
直接而不是 s
与`public. 的偏移量。所以其他文件只需要标题...
extern int s_public_direct;
...并且不知道 public
恰好位于其中的结构的布局(甚至存在)。
在 C/C++ 中,有什么方法可以导出位于结构内的变量的符号引用吗?如果没有,是否有一种优雅的方法来解决这个问题?
请注意,这不是作用域问题,因此将 private
标记为 C++ private:
不会改变引用对象文件仍将通过封闭结构,然后添加偏移量以到达 public
。我真的在寻找某种 C/C++ 语法,告诉编译器导出结构内部变量的符号。或者也许是一种声明新的可导出符号的方法,例如 int s_public_direct
作为结构内变量的别名。
最佳答案
最简单的方法是保持类型不透明并为字段导出访问器函数:
extern int get_t_public(struct t *);
extern void set_t_public(struct t *, int);
这还允许您以只读方式导出它(通过定义没有 set 的 get)或各种其他有用的东西(对值强制执行一些约束,或缓存依赖于它们的东西并在值发生变化,需要重新计算。)
关于c - 在 C/C++ 中,是否可以导出结构内偏移量的链接器符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53092384/