考慮定義的變量下面的結構在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'如何解決這個問題。 –