【发布时间】:2019-06-10 13:58:20
【问题描述】:
假设我有翻译单元 1:
struct SomeData {
int var1;
int var2;
int var3;
} some_data;
union Union1 {
unsigned char buf[1024];
struct {
unsigned char _pad0[8];
int some_int;
};
} union1;
另外,翻译单元 2:
extern int some_int;
extern int some_data_var2;
我想让翻译单元 2 中的符号 some_int 与翻译单元 1 中的 union1.some_int 共享相同的内存。同样,我希望翻译单元 2 中的 some_data_var2 共享相同的内存在翻译单元 2 中记忆为 some_data.var2。我该怎么做?
这是在 Linux 上
【问题讨论】:
-
没有C/C++这样的语言,做你的选择
-
对于C,在翻译单元1中,你可以定义
int *some_int = &union1.some_int;,在翻译单元2中,声明extern int *some_int;。当然,这意味着您必须使用*some_int作为参考,而不是some_int。这可以用一个替换some_int的宏来隐藏,这不是一个好主意,但是首先将结构或联合成员与另一个标识符进行别名并不是一个好主意。 -
@Slava,是的,你是对的,我已经更新了问题
-
在标准 C 和标准 C++ 中无法直接实现您想要的结果。可能有特定于平台的方法可以做到这一点,但你还没有确定你的平台,即使那样也可能是不可能的。它需要对链接器的奇特方向。如果你可以使用指针或函数,你可以接近。