1wireのライブラリでも作ろうと思ってstructを隠蔽しました。C言語ではよく使われるテクニックで、
ヘッダーファイルtest.h内で次のように宣言します。
struct _Test; // 構造体の中は宣言しない
typedef struct _Test Test; // Testでクラスのように使えるようにする
Test* Test_initialize(char n); // コンストラクタ
char Test_get_n(Test* self, void); // nを取得
あとはtest.cで実体を宣言します。
struct _Test {
char n;
}
Test* Test_initialize(char n) {
// メモリ確保処理が終わってTest* testが割り当てられたとする
test->n = n;
return test;
}
char Test_get_n(Test* self, void) {
return self->n;
}
ところがこれはコンパイルが通りません。(メモリ確保処理は別として)どうやらXC8コンパイラでは隠蔽はできないようです。VC++ではできることを確認しました。
onewireについては後で書きます。
0 件のコメント:
コメントを投稿