結構體的聲明與定義分離
阿新 • • 發佈:2017-06-29
應該 函數返回 int 參數 def 一個 寫法 include 函數
最近看到一種比較新穎的寫法 —— 結構體在頭文件中聲明, 源文件中定義
A.h
typedef struct Context Context;
A.cpp
#include "stdafx.h" #include "A.h" struct Context { int param; char *str; };
原以為這樣應該會報錯, 因為頭文件中的 "struct Context" 應該是找不到的, 但amazing, 竟然能順利編譯過, 由此讓我加深了對聲明和定義的理解.
就像函數在頭文件中聲明, 而在源文件中定義一樣, 因為函數的聲明和定義一般都分開寫, 所以習以為常, 但結構體一般都是聲明和定義一起的, 或者說只有定義吧, 所以對這寫法一下子沒反應過來.
這樣寫的好處是: 對用戶透明. 試想一下, 你要寫一個庫, 裏面有個結構體, 但這個結構體只是內部使用和作為參數傳遞, 那麽用戶自然就不關心這結構題的內部結構了, 用戶只要知道哪個函數返回該結構體和哪個函數要使用該結構體作為參數, 只要引用和傳遞, 所以, 只在頭文件聲明該結構體, 讓用戶可以聲明和傳遞這一結構體的變量即可.
類也可以聲明和定義分開, 但好處暫時未想到. 這是C++的思想了!
學術淺薄, 不足之處, 望請指出
結構體的聲明與定義分離