これは私がやりたいことです:
1) データ構造をインスタンス化する関数が必要です。
void instantiateCDB(void);
2) インスタンス化されたデータ構造を更新し、データ構造への const ポインターを返す関数も必要です (読み取り専用にするため)。
これは C++/Java で実行できることを知っています。しかし、Cでも実行できますか?
私が書きたいプログラムフローは次のとおりです。
main(){
instantiateCDB(); // Allocates a CDB
const struct canDataBlock * cdb = getUpdateSystem();
}
// But the best function definitions that I can come up with is this.
struct canDataBlock * instantiateCDB() {
static struct canDataBlock cdb = {0};
return &cdb;
}
const struct canDataBlock * getUpdateSystem() {
struct canDataBlock * cdb = instantiateCDB();
return &cdb;
}
問題は次のとおりです。関数でインスタンス化された書き込み/読み取りアクセスでデータ構造にアクセスするには、instantiateCDB
それが無効であると宣言される場合、どうすればよいですか? 割り当てられたデータ構造を返す場合、ユーザーはデータ構造を変更できるため、canDataBlock
整合性が失われます。私がしたいことは、関数getUpdateSystem()
によってインスタンス化されたデータ構造の値を変更できることだけです。instantiateCDB()
この問題を解決するにはどうすればよいですか? 私が知らないCの別のテクニックはありますか。あるなら教えてください。:)