http://d.hatena.ne.jp/RiSK/20071122/1195704185
参考:C言語でOOP - methaneのブログ

トラバ記念! by RiSK

Web拍手、ありがとうございまーすヽ(゚∀゚)ノ



ちゃんとvtableを作って(継承もできるし)多態も実現できますし,宣言と定義を工夫してアクセス制御(public, protected, private)も実現できます。これだけできれば,C言語でもOOPできると(氏のように)言えると思います。

調べてみるとありますね、C言語オブジェクト指向を扱う方法。
なんていうか……singletonが作りやすそうですね、えぇ[´・[ェ]・]



もっと言っちゃえば,マクロを使って(テンプレートは難しいですけど)ジェネリックも実現できますし,例外も(setjmp, longjmpを使って)実現できますし,スレッドも(実験したことないですけどsetjmp, longjmpを使って)作れるので今流行りの(?)並列処理もできます。

もっと言っちゃえば、Javaだってstaticメソッドを使って関数も実現できますし、構造体はクラスで実現できますし、グローバル変数はsingletonを……ごめんなさい、なんとなく対抗したかっただけです。
setjmpとlongjmpでスレッドって発想は面白いですね。スレッドの切り替えをプログラマが完全に制御できて。
って、あれ……これ国家試験の勉強でみたなぁ。確かアセンブラでやるんじゃなかったっけ、こういう並列処理って。



ですから私は,C言語は究極のマルチパラダイム言語だと思っています。

確かにオブジェクト指向ジェネリック・例外・スレッド・その他諸々をC言語で再現するのは可能でしょう。けど……けどね、

     ヽ       j   .す 
  マ.   ゙,      l.    ご 
  ゾ    !      ',     く 
  い    ',        ',    : 
  で    ト-、,,_    l 
  す    !   `ヽ、 ヽ、    _ 
   ;    /      ヽ、`゙γ'´ 
      /         \ 
      !   ト,       ヽ 
ヽ__  ___ノ ,!   | | ト,       ゙、 
  レ'゙ ,イ ./|!  .リ | リ ! .|! | ト|ト} 
 ,イ ,/ ./〃/ / | / .リ/ //イ|.リ 
// //ノノ  //゙ ノ'////|.リ/ 
´彡'゙,∠-‐一彡〃 ト.、,,,,,,,,,,,レ゙ 
二ニ-‐'''"´      /`二、゙゙7 
,,ァ''7;伝 `        {.7ぎ゙`7゙ 
  ゞ‐゙''  ,. ,. ,.  l`'''゙" ,' 
  〃〃"      !   | 
              !  l 
 !       (....、 ,ノ  ! 
 j        `'゙´  ,' 
     ー--===ァ   / 
      _ _   ./ 
\     ` ̄   ,/ 
  ` .、       / 
   :ミ:ー.、._  /``'''ー-、 
    `゙三厂´