[問題] struct轉型的問題
(板工以身作則來示範怎麼被電)
開發平台(Platform): (Ex: Win10, Linux, ...)
Raspbien + kernel 4.4
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
gcc 4.9.2-10
編譯參數:-Wall -pedantic -O3 -std=gnu11
問題(Question):
正在研究如何用struct做簡單的物件。
我有一個物件 I2C_Device
typedef struct __I2C_Device {
int (*init_func)(struct __I2C_Device* dev);
int (*data_func)(struct __I2C_Device* dev);
} I2C_Device ;
性質是I2C_Device 的物件很多,比如其中一個元件
typedef struct {
I2C_Device dev;
int16_t rawData[3]; // 這兩個元件每一個I2C_Device的物件
float realData[3]; // 不相同,所以不能包在I2C_Device裡
} I2C_Device_ADXL345;
I2C_Device_ADXL345* adxl345
= (I2C_Device_ADXL345*)malloc(sizeof(I2C_Device_ADXL345));
如果我需要用 adxl345->dev.data_func 去修改adxl345->rawData跟realData
我可以怎麼寫?
例如
(int16_t*)((I2C_Device*) adxl345+1)[1] = 2 ; // 設定rawData[1];
(float*)((int16_t*)((I2C_Device*) adxl345+1)+3) = 2 ; // 設定realData[0];
(可是我怕這種寫法會因為alignment的關係得到不正確的結果)
還是有別的更好作法(只能用C的情況)?
請各位賜教。感謝。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 86.209.32.90
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1476179235.A.8CA.html
※ 編輯: wtchen (86.209.32.90), 10/11/2016 17:55:33
→
10/11 18:07, , 1F
10/11 18:07, 1F
這個會不會也有alignment的問題?
→
10/11 18:23, , 2F
10/11 18:23, 2F
推
10/11 18:39, , 3F
10/11 18:39, 3F
→
10/11 18:39, , 4F
10/11 18:39, 4F
我會想這樣做是想把用I2C的device用同一種物件表達。
(每個物件都要做初始、讀取、寫入或校正的動作)
可是每一個I2C device要讀取或寫入的資料大小不一樣,所以只好另外定義。
以C++來說用物件繼承其實簡單多了。
現在就是想用C做C++繼承的動作。
推
10/11 18:47, , 5F
10/11 18:47, 5F
推
10/11 18:50, , 6F
10/11 18:50, 6F
推
10/11 18:56, , 7F
10/11 18:56, 7F
→
10/11 18:56, , 8F
10/11 18:56, 8F
→
10/11 18:58, , 9F
10/11 18:58, 9F
這個方法不錯。
※ 編輯: wtchen (86.209.32.90), 10/11/2016 19:49:17
推
10/11 19:57, , 10F
10/11 19:57, 10F
因為I2C_Device看不到I2C_Device_ADXL345的定義,所以引數只能是I2C_Device*或void*
但是實際上我會放進去引數的type是I2C_Device_ADXL345
用void*的確是比較好,pthread用的引數也是void*
→
10/11 19:57, , 11F
10/11 19:57, 11F
→
10/11 19:58, , 12F
10/11 19:58, 12F
嗯,因為我想錯了。的確直接轉回來就好。感謝
※ 編輯: wtchen (86.209.32.90), 10/11/2016 20:16:55
→
10/11 20:21, , 13F
10/11 20:21, 13F
→
10/11 20:37, , 14F
10/11 20:37, 14F
→
10/11 21:31, , 15F
10/11 21:31, 15F
→
10/11 21:33, , 16F
10/11 21:33, 16F
→
10/11 21:37, , 17F
10/11 21:37, 17F
→
10/11 21:38, , 18F
10/11 21:38, 18F
→
10/12 15:47, , 19F
10/12 15:47, 19F
推
10/13 05:59, , 20F
10/13 05:59, 20F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章