我忘了我之前寫過一篇,有提過相關經驗,
不過找不到,找到再補上來,
( 有興趣的話可以自己先找)。
※ 引述《iamstudent (stu)》之銘言:
前文恕刪。
: c沒有private或是public的功能
: 是否能夠利用把函數藏進c檔
可以,用 static 關鍵字。
// A.c static void Set(int *x) {*x=1;}
// B.c static void Set(int *x) {*x=2;}
static 宣告下去之後,該 function 可視域只能在
A.c / B.c 被看到,不會交互影響。
所以 static function 較常直接寫在 .c 裡面,
連 .h 裡面的宣告都不寫。
: c沒有namespace
: 那麼函數的命名是否都要非常小心
: 而無法使用簡短名稱就好?
照你的看法說來,是的。
且中大型專案裡,我在 C 裡面 function 命名方式常被打槍,
假設是 A.h 裡面的 function,所有函式名稱一律灌上 A 開頭;
假設是 mat.h 裡面的 function,所有函式名稱一律灌上 mat 開頭。
風格有兩種: mat_function_name() , MatFuncName(); // mat.h ;
這種作法就是「自以為是」可以仿 namespace 簡單作法。
不過這樣下來就不會撞名,因為在一個專案裡面不會有二個 .h 名稱一樣,
但缺點就是函式名稱比一般人寫的長到不像話。
( 麻煩一點,但我較求簡便性的正確 )
: 還是說實際上有什麼比較安全的設計原則?
: ------------------------------------------------------
: 第二個問題是
: B.c並不會被別人include
: 本身就有程式進入點
: (但不是main也不是win main,因為是plugin程式,名稱也非常不顯眼)
: 目前來看
: 只會有B.c會去include B.h
: 那麼,提出head檔B.h,是否是多餘的?
不會。一方面如上述的 static function 問題,
一方面不代表日後維護會再用到 B.h
: 究竟應該把.c檔的函數與型態定議都提出到head
: 還是只提出不會與別人衝突的部份就好
我簡單的說吧,我寫純 C 的習慣是,
宣告在 B.h 的 data type、fuction,
視為 class 裡面的 public;
寫在 B.c 的 data type、function,
若要作為 private 作用,
一律宣告成 static ,
其他還要再實作 B.h 裡面,所有被宣告的 function。
我大型專案經驗不多,以上淺見供參考。
--
No matter how gifted you are,
alone, can not change the world.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.78.41