考虑定义的变量下面的结构在ModuleA定义:声明其在结构
typedef struct{
int A;
int B;
int C[4];
}myStructType;
myStructType MyStruct;
如果我想用从ModuleB这个结构,那么我会声明在ModuleA的结构头像是这样的:
extern myStructType MyStruct;
到目前为止,这么好。其他模块可以通过包含Module A头文件来读写MyStruct。
现在的问题是:
我怎样才能声明只能在模块头文件的结构的一部分?例如,如果我希望ModuleB能够读取和写入MyStruct.C(或者为了使事情变得更简单,可能是MyStruct.A或MyStruct.B),但不一定知道它在结构中或知道元素A和B.
编辑:我也许应该指定这将在嵌入式系统中执行,它基本上在编译时进行所有的内存分配,所以我们可以在编译时非常自信地知道MyStruct在哪里位于(并且它不会移动)。
EDIT2:我还要澄清一点,我并不想防止其他模块访问该结构的部分,而是,我试图允许其他模块访问单个元素,而无需去做MyStruct.Whatever,因为其他模块可能只关心单个元素而不关注整个结构。
肯定有办法做到这一点,如果我们包括丑陋的黑客是可能的答案。例如:#define StructElementA((&MyStruct.A)*)no? –
是的,为了让故事更长,例如,可以用填充符而不是“不可访问”元素声明结构。但是这不会是可靠的。不过,不知道你的'#define'如何解决这个问题。 –