私は長い間OOP(C ++ / Java / PHP / Ruby)を行ってきましたが、LinuxやApacheなどの大規模なプログラムやライブラリを完全に必須のスタイルで作成する方法を想像するのは非常に困難です。Cで物事がどのように行われているのかを理解するために私が見ることができる小さなオープンソースCプロジェクトは何でしょうか?
プロジェクトがGitHubでホストされている場合は、ボーナスポイントが加算されます。
私は長い間OOP(C ++ / Java / PHP / Ruby)を行ってきましたが、LinuxやApacheなどの大規模なプログラムやライブラリを完全に必須のスタイルで作成する方法を想像するのは非常に困難です。Cで物事がどのように行われているのかを理解するために私が見ることができる小さなオープンソースCプロジェクトは何でしょうか?
プロジェクトがGitHubでホストされている場合は、ボーナスポイントが加算されます。
C でもまったく同じ方法で処理が行われますが、言語からの明白なサポートは少なくなります。一部の状態をカプセル化するクラスを作成する代わりに、構造体を作成します。暗黙的な this パラメーターを使用してクラス メンバーを作成する代わりに、struct* を最初のパラメーターとして明示的に渡す関数を作成し、構造体を操作します。
カプセル化が壊れないようにするために、ヘッダーで構造体を宣言できますが、それが使用される .c ファイルでのみ定義します。仮想関数はより多くの作業を必要としますが、繰り返しになりますが、構造体に関数ポインターを配置する場合にすぎません。Cではvtablesを手動で入力し、コードのどの部分がどのCOMインターフェイスの一部を実装するかについて非常に細かいレベルの制御を取得できるため、実際にはC++よりもCの方が便利です(もちろんCでCOMに興味がある場合) .
ccan(PerlのCPANをモデルにした包括的なCアーカイブネットワーク)がおもしろいと思うかもしれません。
現時点では小さいですが、貢献は高品質です。貢献の多くは、Linuxカーネル開発者によるものです。
そこにあるほとんどすべてが「数千LOC」以下のカテゴリにも分類されます。
手始めに小さな例が必要な場合は、基本的な Linux CLI ユーティリティのソースを調べてみてください。 GNU binutils、make、またはその他の GNU ユーティリティには、完全なソース コードがあり、比較的小さなコード ベースです (一部は他よりも大きくなります)。最も簡単な方法は、通常、以前に使用したことがあり、既に使い慣れているユーティリティから始めることです。
C でオブジェクト指向プログラミングを行う方法のほぼ標準的な例については、GLibを参照してください。