最近看到一種比較新穎的寫法 —— 結構體在頭文件中聲明, 源文件中定義函數
A.hspa
typedef struct Context Context;
A.cppcode
#include "stdafx.h" #include "A.h" struct Context { int param; char *str; };
原覺得這樣應該會報錯, 由於頭文件中的 "struct Context" 應該是找不到的, 但amazing, 居然能順利編譯過, 由此讓我加深了對聲明和定義的理解.blog
就像函數在頭文件中聲明, 而在源文件中定義同樣, 由於函數的聲明和定義通常都分開寫, 因此習覺得常, 但結構體通常都是聲明和定義一塊兒的, 或者說只有定義吧, 因此對這寫法一會兒沒反應過來.編譯
這樣寫的好處是: 對用戶透明. 試想一下, 你要寫一個庫, 裏面有個結構體, 但這個結構體只是內部使用和做爲參數傳遞, 那麼用戶天然就不關心這結構題的內部結構了, 用戶只要知道哪一個函數返回該結構體和哪一個函數要使用該結構體做爲參數, 只要引用和傳遞, 因此, 只在頭文件聲明該結構體, 讓用戶能夠聲明和傳遞這一結構體的變量便可.class
類也能夠聲明和定義分開, 但好處暫時未想到. 這是C++的思想了!變量
學術淺薄, 不足之處, 望請指出引用