[問題] 函式的原型宣告的地方(.c檔或.h檔)?

看板C_and_CPP作者 (陣內家的孩子)時間9年前 (2014/09/28 23:32), 編輯推噓6(6022)
留言28則, 8人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux, GCC 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 沒有 問題(Question): 小弟剛開始工作,第一次碰到大形的程式。 有一個問題不太清楚。 有看到專案中的.c檔,裡頭實作了一些函式; 但這些函式的原型部份宣告在同一隻.c檔裡,另一部份宣告在.h檔裡。 這樣做是有什麼特別的原因嗎? 補充說明(Supplement): 另外想問一下,對於初次接觸大型程式的新手。 有沒有推薦的書可以看? 總覺得以前大學唸的只是教你拌水泥..砌牆蓋房子要自己來.. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.233.90.2 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1411918370.A.644.html

09/28 23:36, , 1F
就是把函式變成 private function,只能在同一.c中叫
09/28 23:36, 1F

09/28 23:36, , 2F
也就是abstraction (implementation hiding)的方法
09/28 23:36, 2F

09/28 23:38, , 3F
當然也有可能是作者沒有遵守coding convention
09/28 23:38, 3F

09/28 23:40, , 4F
所以就是說這個.c檔裡實作的function,他願意給其他人用
09/28 23:40, 4F

09/28 23:41, , 5F
的,他就把原型宣告在.h裡,只給自己用的就宣告在.c囉?
09/28 23:41, 5F

09/29 00:07, , 6F
忘了說,謝謝1樓的回答!感恩!
09/29 00:07, 6F

09/29 01:19, , 7F
因為實務上只會去include .h, 所以放在.c的正常來說
09/29 01:19, 7F

09/29 01:19, , 8F
是不會被看到的,你這樣想就對了。
09/29 01:19, 8F

09/29 01:19, , 9F
對C來講 宣告位置是限制可見度的唯一方法
09/29 01:19, 9F

09/29 05:02, , 10F
可見度?visibility 和 linkage 是同一種東西嗎?
09/29 05:02, 10F

09/29 05:02, , 11F
如果是的話,跟宣告位置應該沒有關係把XD
09/29 05:02, 11F

09/29 06:24, , 12F
在大型專案裡,別人只想知道如何用程式,ㄧ點都不想看
09/29 06:24, 12F

09/29 06:24, , 13F
程式碼。
09/29 06:24, 13F

09/29 06:25, , 14F
.h是跟別人說如何使用。
09/29 06:25, 14F

09/29 06:28, , 15F
大型專案裡,程式碼都在公司主機,也沒有啥麼好隱藏的
09/29 06:28, 15F

09/29 06:28, , 16F
。程式碼都是共享的。
09/29 06:28, 16F

09/29 09:26, , 17F
對函式庫的使用者來講 能見度就僅止于.h
09/29 09:26, 17F

09/29 09:27, , 18F
對有原始碼的使用者來講 也不該讓他們費心.h外的東西
09/29 09:27, 18F

09/29 09:28, , 19F
可見度跟linkage算是截然不同的兩碼子事情
09/29 09:28, 19F

09/29 10:40, , 20F
隱藏的用意是"你不需要看"而不是"不准你看"
09/29 10:40, 20F

09/29 11:21, , 21F
別太執著這點,現在做純軟體的都會被破解。做半軟半硬
09/29 11:21, 21F

09/29 11:21, , 22F
的才是王道。
09/29 11:21, 22F

09/29 16:07, , 23F
可見度不只是想隱藏的問題 還有汙染命名空間的問題
09/29 16:07, 23F

09/29 16:14, , 24F
function 宣告沒加static別人也可link,即使你沒include
09/29 16:14, 24F

09/29 16:16, , 25F
只是說他提供的h檔是開放出來給別人使用的API~
09/29 16:16, 25F

09/30 13:53, , 26F
不過我看網路上好像大部分是 visibility = linkage
09/30 13:53, 26F

09/30 13:54, , 27F
像是 wiki 寫 static 影響 visibility XD?
09/30 13:54, 27F

09/30 13:57, , 28F
哦 好像也有 visibility = scope 的說法...(混亂
09/30 13:57, 28F
文章代碼(AID): #1KA2eYP4 (C_and_CPP)