[問題] 專案中的 include/lib 資料夾該放什麼
其實小弟想發問的問題有兩個,
首先是如標題說明的,在一個專案裡的 include & lib 資料夾分別代表什麼意思,
我知道跟 header file、static library、shared library 有關,
但我想問的不是在 source code include header file 或是 compile time 的 linker
相關問題,
而是說 "什麼概念的 source code" 該放在 include & lib 資料夾。
第二個問題是 class 的 declaration & definition 到底怎麼寫才是對的,
因為不管是學校或是網路上的入門教學,都會建議介面跟實作要分開,
幾乎所有的例子都是 declaration 放在 .h 檔、definition 放在 .cpp 檔,
所以原本小弟一直以為 class 的 declaration (.h) 就是放在 include、class 的
definition (.cpp) 就是放在 lib,
但看了一些 open source 的專案才發現不是我想的這樣。
以最近在看的 LLVM 的 SmallVector 當例子,
(簡單說明一下,SmallVactor 是對 elements 較少的情況而去優化的 vector)
在 LLVM 的 source code 中可以分別找到
SmallVector.h
https://code.woboq.org/llvm/llvm/include/llvm/ADT/SmallVector.h.html
以及
SmallVector.cpp
https://code.woboq.org/llvm/llvm/lib/Support/SmallVector.cpp.html
但翻一下 code 可以發現幾乎 95% 的功能實作都是在 .h 檔裡面,
並且也沒有所謂的介面與實作分開。
雖然寫了一段時間的程式,但對這一塊真的沒什麼研究,
google 也是找到一堆 header file 與 library 之間的差異,
但我想問的不是 link 之類的問題啊~~
最後再簡述一下問題:
1. 專案中的 include & lib 資料夾中的 source code 應該放什麼概念的 code
才是對的?
2. (X) 介面與實作分開這件事是有必要的嗎?
(O) 介面與實作分開這件事該怎麼分割比較適合?
先謝謝看完問題的各位~
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.226.233.170 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1594557782.A.F1C.html
※ 編輯: poolongkong (36.226.233.170 臺灣), 07/12/2020 20:44:47
→
07/12 21:50,
5年前
, 1F
07/12 21:50, 1F
→
07/12 21:50,
5年前
, 2F
07/12 21:50, 2F
→
07/12 23:14,
5年前
, 3F
07/12 23:14, 3F
→
07/12 23:14,
5年前
, 4F
07/12 23:14, 4F
推
07/12 23:22,
5年前
, 5F
07/12 23:22, 5F
謝謝樓上板友們的回覆,我還真的忘了 template 的問題
→
07/13 03:27,
5年前
, 6F
07/13 03:27, 6F
我個人會認為是為了好維護以及節省編譯時間,
但依稀有印象,在求學階段有聽過其中一個是安全性的原因,
不過安全性的部份我倒是不太懂...
但l大會這樣問應該是我的問題敘述不恰當,已更正了!
我想問的其實是介面與實作分開這件事該怎麼做比較適合,
比如說是什麼樣的 member function 應該在 header file 實作就好,什麼樣的
member function 又會比較適合在 .cpp 檔實作,
(例如大部分的 template 會實作在 header file)
※ 編輯: poolongkong (36.226.233.170 臺灣), 07/13/2020 03:47:24
→
07/13 03:43,
5年前
, 7F
07/13 03:43, 7F
→
07/13 03:43,
5年前
, 8F
07/13 03:43, 8F
→
07/13 03:43,
5年前
, 9F
07/13 03:43, 9F
→
07/13 03:43,
5年前
, 10F
07/13 03:43, 10F
→
07/13 03:43,
5年前
, 11F
07/13 03:43, 11F
→
07/13 03:43,
5年前
, 12F
07/13 03:43, 12F
→
07/13 03:43,
5年前
, 13F
07/13 03:43, 13F
→
07/13 03:43,
5年前
, 14F
07/13 03:43, 14F
→
07/13 03:43,
5年前
, 15F
07/13 03:43, 15F
剛剛回覆第一則推文的時候還沒看到這些 0.0
我已經知道大部分 template 會實作在 header file 的原因 (就如同l大說的),
但除了 template 之外,
我有看過一個 class 中,部份的 member function 就實作在 header file 裡,
另一部分的實作又放在 .cpp 檔,
這種情況在實務上會有什麼特殊的意義嗎?
還是我看到的只是 coding style 不好的特例...
※ 編輯: poolongkong (36.226.233.170 臺灣), 07/13/2020 03:55:38
→
07/13 03:52,
5年前
, 16F
07/13 03:52, 16F
→
07/13 03:52,
5年前
, 17F
07/13 03:52, 17F
→
07/13 03:52,
5年前
, 18F
07/13 03:52, 18F
→
07/13 03:52,
5年前
, 19F
07/13 03:52, 19F
→
07/13 03:52,
5年前
, 20F
07/13 03:52, 20F
→
07/13 03:52,
5年前
, 21F
07/13 03:52, 21F
所以其實界面與實作分開是要根據使用情境去做一些 trade off 嗎?
(比如上面提到的 template 這樣)
※ 編輯: poolongkong (36.226.233.170 臺灣), 07/13/2020 04:01:23
→
07/13 04:02,
5年前
, 22F
07/13 04:02, 22F
→
07/13 04:02,
5年前
, 23F
07/13 04:02, 23F
→
07/13 04:02,
5年前
, 24F
07/13 04:02, 24F
→
07/13 04:02,
5年前
, 25F
07/13 04:02, 25F
→
07/13 04:02,
5年前
, 26F
07/13 04:02, 26F
→
07/13 04:02,
5年前
, 27F
07/13 04:02, 27F
→
07/13 04:02,
5年前
, 28F
07/13 04:02, 28F
→
07/13 04:02,
5年前
, 29F
07/13 04:02, 29F
→
07/13 04:02,
5年前
, 30F
07/13 04:02, 30F
→
07/13 04:02,
5年前
, 31F
07/13 04:02, 31F
→
07/13 04:02,
5年前
, 32F
07/13 04:02, 32F
→
07/13 04:06,
5年前
, 33F
07/13 04:06, 33F
→
07/13 04:06,
5年前
, 34F
07/13 04:06, 34F
大概明白了,感謝l大!!
之前都覺得界面與實作分開是一種絕對的關係,
所以一直以為可能有某種規則存在,
如果符合該規則就是實作在 header,不符合就實作在 .cpp 檔之類的情況,
原來跟我想的完全不一樣... Orz
※ 編輯: poolongkong (36.226.233.170 臺灣), 07/13/2020 04:12:20
→
07/13 05:20,
5年前
, 35F
07/13 05:20, 35F
→
07/13 05:20,
5年前
, 36F
07/13 05:20, 36F
→
07/13 05:20,
5年前
, 37F
07/13 05:20, 37F
→
07/13 05:20,
5年前
, 38F
07/13 05:20, 38F
等等空閒的時間來看一下相關資料,再次感謝l大!!
※ 編輯: poolongkong (140.113.193.216 臺灣), 07/13/2020 13:26:26
推
07/21 09:30,
5年前
, 39F
07/21 09:30, 39F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章