[問題] C 語言下有類似 Template 的功能嗎?

看板C_and_CPP作者 (z0 gj3c.6)時間7年前 (2017/05/24 10:03), 7年前編輯推噓3(305)
留言8則, 4人參與, 最新討論串1/2 (看更多)
如題。Template 是 C++ Library 才有的工具。 如果要讓 C 語言的程式碼簡單一點,有什麼好招能用嗎? 目前在編寫 Linux driver ,只能用 C 。 板上 / 過 template 了。 希望大家提供協助,謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.120.179.172 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1495591422.A.F60.html

05/24 10:05, , 1F
如果你是要產生大量類似的code,有
05/24 10:05, 1F

05/24 10:05, , 2F
preprocessor可以做這種事
05/24 10:05, 2F

05/24 10:16, , 3F
gcc可以用boost.preprocessor
05/24 10:16, 3F

05/24 12:36, , 4F
typeof __typeof__
05/24 12:36, 4F

05/24 13:32, , 5F
原po還是說清楚一點想怎麼精簡,這樣比較好確認方式
05/24 13:32, 5F
int get_[obj_s member](struct obj_s *self){ int err_code = checkByMode(self, &_common_update_attr_[obj_s member], "common_get_[obj_s member]"); if (err_code < 0){ return err_code; } return (int)self->[obj_s member]; } 如上。我只是想對 struct obj_s 中不同的 member 執行 get 的動作, 程式碼中除了 [obj_s member] 是根據不同的 member 而變化。 其他的部分完全一模一樣。 但我的前輩為每一種 member 都寫了一個 function ,導致 code 顯得冗贅。 請問我需要怎麼精簡? 由於 members 的 type 分別有 uint8_t、int、char*...等等, 所以原本想到能不能用類似 C++ 的 template 完成?我需要在 C 語言上達成。 ※ 編輯: henry8168 (59.120.179.172), 05/24/2017 13:54:40

05/24 14:13, , 6F
這簡單,不過我要回想一下,太久沒寫
05/24 14:13, 6F

05/24 23:46, , 7F
常見的做法大概是這樣吧 http://ideone.com/uitahM
05/24 23:46, 7F

05/25 14:38, , 8F
推樓上這份code
05/25 14:38, 8F
文章代碼(AID): #1P9Ed-zW (C_and_CPP)
文章代碼(AID): #1P9Ed-zW (C_and_CPP)