【1】每個C文件都是一個僞類,除了main()函數所在的C文件。函數
【2】在C文件頂部定義該僞類的結構體,結構體內其實並無必要使用函數指針來模擬成員函數。ui
struct fifo_t { uint8_t *buf; uint32_t size; uint32_t in; uint32_t out; };
【3】NEW。spa
經過相似的函數來建立新的僞類對象/實例。銷燬相似。指針
struct fifo_t * fifo_create(uint32_t size) { struct fifo_t * fifo = malloc(sizeof(struct fifo_t)); /*
do something */ return fifo; }
【4】私有函數前加static關鍵字code
static void * __fifo_a_private_func(struct fifo_t *fifo,int arg)
【5】頭文件中只包含結構體聲明和函數的聲明,保護結構體內的【私有變量】不被直接讀寫。對象
struct fifo_t; struct fifo_t * fifo_create(uint32_t size); void fifo_destroy(struct fifo_t *fifo); /* some other functions */
【6】沒有繼承。
通常也不須要繼承,實在須要就換C++好了。blog
【7】只有一個對象/實例的狀況。其實這種狀況才比較常見,能夠放棄*_create()和*_destroy()函數,頭文件中也只須要函數聲明,這樣更完全地保護私有變量。整個C文件中只有一個有static前綴的結構體實例,函數中也很明顯的區分出函數內部的局部變量和本文件的全局變量(對象)。繼承
struct transmit_t { int fd; /* */ }; static struct transmit_t transmit = { .fd = -1 }; int transmit_init() { transmit.fd = // some thing /* */ } void transmit_destroy() { /* */ }/* some other function*/