5

「Cの最適な用途は何ですか」という質問に続きます。

Linux カーネルは有名でよく考えられた C プログラムのようです。しかし、それは主流の「ベストプラクティス」C の良い例ですか?

4

9 に答える 9

18

私はこれにうんざりする準備ができていますが、Linux カーネルは手に負えなくなった学生プロジェクトです。さらに深刻なことに、Linux カーネルがプログラミングの観点からうまく機能しているのは、非常に厳格な一連の設計とコーディングのガイドラインを定めていることです。これにより、非常に多くの人々が貢献できるようになり、すべてがうまく調和します。

私が信頼する、オペレーティング システムを生涯の仕事にしている人々は、BSD カーネルは優れた C プログラミングと優れた OS 設計のより良い例であると言っています。私はバークレーの教授たちを十分知っているので、この主張に驚かない.

より広い意味で、OS カーネルは高度に専門化されたものであり、カーネルについて主流となるものは何もありません。C の優れた実践例が必要な場合は、Kernighan と Pike のThe Practice of Programmingに関する本を試してみてください。または、実際のシステムを研究したい場合、Lua の実装は十分に小さく、すべてを読み取ることができ、非常によく設計されており、移植性が非常に高く、ANSI C コンパイラを備えた任意のプラットフォームで実行できます。

主観的で論争的な回答をお詫びします:(

于 2009-01-14T03:59:04.797 に答える
16

良い例とはどういう意味ですか? Linux カーネルは C 言語で書かれた非常によくできたカーネルであると思いますが、いくつかの問題があり、その多くはクリーンアップされています。ただし、一般的な C コードの書き方の例として使用する限り、あまり当てはまらないと思います。カーネルを読んで理解することで、C について多くのことを学ぶことができます。標準ライブラリは利用できません。たとえば、「printf」ではなく「printk」などと表示されます。闇魔法もある。カーネルは非常に特殊なケースです。たとえば、ファイル マネージャーやデータベースなどの一般的なアプリケーションを作成している場合は、ベスト プラクティスを見つけるためには使用しません。

于 2009-01-14T00:56:09.630 に答える
9

はい、そうです。

カーネルの詳細に圧倒されたくない場合は、C で記述された Linux ユーティリティ関数のいくつかから始めることができます。ソースの入手方法の詳細については、この質問への回答を参照してください。

C ソース コードを読むのに適したもう 1 つの場所は、C 独自の標準ライブラリです。

最後に、もう 1 つ、良いと聞いている最近の C プロジェクトはGitです。

于 2009-01-14T00:55:27.460 に答える
3

gnu ユーティリティ (たとえば、'ls' や 'awk' などの標準の UNIX ユーティリティのソース コード) を参照することをお勧めします。カーネルには、他のタイプのソフトウェアとは異なるパフォーマンス ニーズと互換性の問題があります)。

于 2009-01-14T03:37:39.083 に答える
2

主流のプログラムの場合は?いいえ。 *nix カーネル コードは一般にユーザーランドにはありません。そのため、ほとんどの「主流」プログラミングとは異なる慣習と要件があります。ただし、これは、学習するために学習できる最高かつ最高品質の C コードの一部です。これには弱点があり、完全に適切に記述されているわけではありませんが、ほとんどの場合、非常に効果的でクリーンなコードです。

于 2009-01-14T09:37:29.420 に答える
1

C を学習するという観点から質問している場合、最初は圧倒されるかもしれません。C の使用に関する限り、移植性とパフォーマンスを必要とするアプリケーションに最適です。これは、システム レベルのプログラミングによく使用されます。しかし、それは抽象化を犠牲にして行われます。したがって、Java や C++ などの言語とは異なり、自分でコーディングの大部分を行う必要があります。理想的には、アプリケーションの種類によって言語の選択を決定する必要があり、オペレーティング システムでは C が最適です。

Linux カーネルについて学習する 1 つの方法は、非常に古いバージョンの Linux カーネルから始めることです。これには肉が含まれ、現在のカーネルに存在する追加の複雑さが隠されます。基本を理解するにはこれで十分です。

于 2009-01-14T00:57:32.060 に答える
1

それが「ベストプラクティス」であるかどうかは、誰に尋ねているかによって異なります。Windows プラットフォームで書かれた低レベルの C プログラムもたくさんありますが、それら (たとえば、WINDDK のデバイス ドライバーの例) を見てみると、Microsoft がC と呼ぶ別の言語の発明に成功していることに気付くでしょう :-)それでも、Windows でデバイス ドライバーを開発する場合は、これらを "ベスト プラクティス" と見なす必要があります。

于 2009-01-14T01:19:28.600 に答える
0

優れた場所の 1 つは、使用中のオープン ソース コンパイラのコードを調べることです。コンパイラを作成するには、優れたデータ構造とポインタのスキルが必要です。

于 2009-01-14T03:43:28.620 に答える
0

カーネルは、モジュール化されたコードの書き方の非常に良い例だと思います。C言語ですが、ややオブジェクト指向です。

于 2010-07-08T16:53:10.247 に答える