c 標頭檔案中定義函式的優缺點

2021-07-04 19:53:15 字數 578 閱讀 3360

最近看caffe **, 有些標頭檔案中 ,直接實現了該函式。 以前了解到是 標頭檔案盡量不要實現, 放到cpp中實現, 短小的程式也可以實現。但是為什麼這樣,標頭檔案實現有什麼優缺點不是很清晰。基於這個,這篇部落格重點在討論 標頭檔案實現函式的優缺點。

比如caffe 在layer.hpp中實現 

emplate inline void layer::backward(const vector*>& top,

const vector& propagate_down,

const vector*>& bottom)

}// serialize layerparameter to protocol buffer

template void layer::toproto(layerparameter* param, bool write_diff)

}} // namespace caffe

應該說要把

介面和實現

分離開來

或者把宣告跟定義

分離開來

私有的東西就不要暴露在標頭檔案裡啦, 標頭檔案裡只寫介面

關於在標頭檔案中定義函式的缺點

同乙個函式 變數可以在不同的c檔案中根據需要有多個宣告,但只能有乙個定義。這就決定了如果在標頭檔案中定義函式或變數,則該標頭檔案只能使用一次,不能被別的c檔案使用,也即限制了最好只有乙個c檔案,因為別的c檔案已經不能再使用這些標頭檔案 而標頭檔案的真正用處是實現 介面 使變數或函式供別的模組呼叫函式...

c 中巨集定義的優缺點分析

其實在用vc程式設計的時候就會遇到很多巨集定義,尤其是類似 long,lpctstr 等等之類的,它們屬於微軟的自定義型別,但其本質上還是屬於c c 裡面的那幾個標準型別。那用巨集定義到底有什麼好處呢?先來看一下巨集的定義 用 define命令將乙個指定的識別符號 即巨集名 來代表乙個字串。它的一般...

巨集定義的優缺點

在用vc程式設計的時候就會遇到很多巨集定義,尤其是類似 long,lpctstr 等等之類的,它們屬於微軟的自定義型別,但其本質上還是屬於c c 裡面的那幾個標準型別。那用巨集定義到底有什麼好處呢?先來看一下巨集的定義 用 define命令將乙個指定的識別符號 即巨集名 來代表乙個字串。它的一般型式...