C語言本身沒有自帶多少特性,卻可以使用這些自帶特性,實現如 類 繼承 多態 泛型 等高級抽象特性(部分特性),在C語言大型項目上好像經常這麼做

個人比較好奇C語言到底可以抽象到什麼境界(具有實用價值的抽象)


Gnome桌面環境有一個底層庫,glib,就有一套題主提到的對象系統。這套系統順便給vala提供了運行時。

Linux的VFS,也是類似的操作,給你定義了一套介面(函數指針組成的對象),只要你對應實現上面這些操作,就能做一套自己的文件系統。

另外的黑魔法,無非就是利用tagged union(ADT)和函數指針(高階函數/閉包)來模擬函數式編程的一些操作啦。

只要你寫著不嫌麻煩不嫌累,除了涉及泛型的抽象(這個其實也可以用宏來處理)不太容易搞定之外,其他的基本都不在話下。(反正到了搞不定的地方都能void*暴力解決)


C語言的struct裡面放函數指針,然後就可以實現類似於 foo-&>bar(); 這樣的多態了。不過this指針需要自己傳入。


因為C語言對於內存和機器指令的操作方式是直接的,所以它的抽象形式上限是編程人員的想像力,而不是語言本身。


用C寫個python編譯器,然後用python寫程序,把編譯器和主程序打包在一起,你就實現了python級別的抽象


能夠抽象出操作系統,你說有多抽象!


你要是覺得沒事做你就去看看這本書

OOC?

www.cs.rit.edu


結構體包含結構體模擬繼承

結構體指針+只有前置聲明模擬私有成員或實現句柄

結構體包含函數指針模擬虛函數

很多C式介面的lib都有類似的設計


c語言作為一個高級機器語言

真的沒什麼好的

弱類型系統

庫支持差勁

另外提一嘴

Python就是一個運行在虛擬機上的c with classes

只不過 人家庫太多 封裝也不錯 就是弱類型忍不了


推薦閱讀:
相關文章