2017-04-04 58 views
0

我有兩個在Visual Studio 2015下編寫的C項目。第一個項目只是一個靜態庫項目,而第二個項目是一個控制檯應用程序,它使用第一個項目生成的靜態庫文件。驗證封裝生成的庫

我在Windows中使用DUMPBIN工具檢查了靜態庫文件,發現有很多變量和函數暴露在外面,這對封裝問題非常不利。

我的問題是我怎麼能確定我不公開那些應該是私人的功能。我是否需要每次使用該工具進行檢查?我的問題也涵蓋了變量。我所有的靜態全局變量也暴露在外面。我如何強迫他們成爲私人?

+0

根據定義,內部連接的名稱不應該用於外部。如果您的庫包含多個編譯單元,則不要提供內部聲明。 – Olaf

回答

1

我不認爲在dumpbin輸出中的存在可以被認爲是「暴露」。所有的靜態全局變量都需要一些空間分配,並可能在運行時進行初始化。所以對於他們來說,存在於dumpbin輸出中是很自然的。另外,如果您正在編譯鏈接時代碼,那麼所有內容實際上都是「暴露」的。

+0

啊,非常有用的信息。那麼我怎麼能理解哪些功能被暴露,哪些不是? – sanchop22

+2

在C中提供「公共接口」的正確方法是編寫一個頭文件,其中包含所有公開可用的東西的聲明,並希望此頭文件的用戶不會嘗試深入並連接一些內部東西(甚至意外地)。例如,如果你有一個非靜態的全局變量int foo,那麼有人可能會在他自己的「.c」文件中重新聲明它爲extern int foo和change。功能也一樣。所以只要有可能,內部的東西應該被聲明爲靜態的,因爲其他東西都可以從外部訪 – dodo951