Cを学ぶための実用的な方法は?[閉まっている]


10

私はCを掘り下げたいのですが、通常、新しい言語を学びたいときは、いくつかの実用的な目的(APIを使用する、タスクを自動化するなど)を持つシンプルで達成可能なプロジェクトの目標を考えます。

私がCの1つを思い付くのは、主にCの主な用途が現在組み込みシステムとオペレーティングシステムのようなより複雑なソフトウェアプロジェクトであることを指摘しているためです。

これは、私がそれを学ぶ必要がないという事実、または私の学習戦略でもう少し複雑にする必要があるという事実を指摘していますか?

実践的な学習リソースへの参照?(チュートリアル/どのようにそれが何らかの目的/利益を持つ最終結果を生み出すか)


3
Cを学びたい理由を教えてください。
zvrba

2
私はzvrbaに同意します。Cは、低レベルで高速なものやドライバーコードに最適です。ゲーム用のコードを書いている場合は、それも素晴らしいです(ただし、「非標準」のコードを書いたことについて不満を言うC ++プログラマーと協力しているでしょう)。しかし、アセンブリとCはラテン語(話し言葉)に似ていると思いますが、最初のものではありませんでしたが、それらのほとんどは、独自の言語を作成するためにそれらのアイデアや構成を使用した後に生まれました。したがって、C MIGHTを勉強すると、高水準言語をよりよく理解できるようになります
Jamie Taylor

あなたはゼッド・ショーさんがチェックアウトしたCザ・ハード・ウェイ学びます。可能な限り実用的で、しかも無料です。
ワイアットバーネット

Python the Hard Wayの人はCのアルファ版を含む他の言語の本を持っているので、そこから始めます。Cは高レベルのasmとの大きな違いです。それはfalseであるため、私はasmとの比較を嫌います。比較的確実に、他の言語ではできないことを実行できます。Cで記述できるアプリケーションを何にしたいかは関係ありません。アプリケーションを言語にターゲティングする理由はありません。
old_timer

回答:


27

カーニハンとリッチーの 『Cプログラミング言語(第2版)』を入手することをお勧めします。各章の終わりには、C言語の非常に優れた入門書を提供するとともに、実行できる多くの演習があります。言語をマスターすることはできませんが、C書かれたオープンソースプロジェクトを見つけ、ソースを読んで貢献できるようにするために、本の最後と演習を十分に理解する必要があります。に。

Cコードを含む実際の実際のプロジェクトを見たい場合。それは難しくなっています-多くのプロジェクトは「より高いレベル」の言語を使用していますが、Cはまだ生きており、活発です。Cを学びたい場合は、学習を達成するためにホイールを再発明することを恐れないでください。ソリューションを24時間体制で再発明することは良い考えではありませんが、学術的な演習として実施することはまったく問題ありません。


1
comp.lang.cのFAQをそれに追加します。c-faq.com
Mike Sherrill 'Cat Recall'

3
+1は、学ぶためにソリューションを再発明することを気にしません。
CVn、2011

4
K&Rは、一般に優れたプログラミングスタイルを習得するのは恐ろしく、特に安全で正気なCプログラミングの実践を教えるのは恐ろしいです。その中のすべてのコードスニペットは、せいぜい難読化されており、ほとんどの場合、完全に危険な習慣を教えています。それは時代遅れの本ですので、懐かしさ以外にはお勧めしません。特に初心者プログラマーには不向きです。

2
@トーマスはい第2版。あなたはそれからコードスニペットのほとんどを引用することができ、私はおそらく2〜3の危険/貧弱な練習ケースを指摘することができます。今、本を開いて、ランダムな例を選びます。さて、p119:条件内での割り当て、ネイティブプリミティブデータ型の使用、暗黙のint(符号なし)の使用、mallocの結果の型キャスト(非常に悪い!)、パラメーターを型キャストしてvoid *に解放(なぜ???? )、{}がない場合は適切な#includeなしでNULLを使用して、複数の戻り(別名スパゲッティ)。

2
+ 1for KnRC。これは、私が今まで読んだ特定の言語でのプログラミングの最高の(そして最も簡潔な)紹介です。他の人が指摘したように、場所によっては少し疑わしいかもしれません-私が与えるアドバイスの1つはこれです:周囲の宣伝文を読むことを要求するプログラミングマニュアルがあった場合、これはそれです。他の人は、通常、コードブロックから理解できますが、この本では、少なくとも1度は表紙から表紙までを読む必要があります。
ジェイミーテイラー

1

あなたは本当にメモリ割り当てを理解する必要があるでしょう。以前に他の言語を使用したことがあるように聞こえますが、他の言語がメモリ管理の面倒な詳細を隠していた可能性があります。Cでは、メモリ管理は常に明示的です。これにはいくつかの利点がありますが、それを正しく行うには注意が必要です。そうしないと、すべての地獄が壊れてしまいます。

使用しているプラ​​ットフォームで利用可能なメモリデバッグ機能を使用してください。LinuxにはElectric Fence、Mac OS XにはGuard Mallocがあります。また、いくつかのオペレーティングシステムをサポートするValgrindもあります。

解放する必要があるメモリの解放に失敗すると、メモリリークが発生します。それを続けると、メモリが不足します。バッキングストア(ほとんどの人が仮想メモリと呼ぶもの)を使用しても、システムのページングが過剰になったり、スワップ領域が不足したりする可能性があります。

すでに解放されているメモリを解放すると、ヒープが破損してクラッシュしますが、おそらくすぐにはできません。バッファをオーバーランさせると、ヒープも破損します。メモリデバッグツールは、これらすべてに役立ちます。

単体テストも役立ちます。


0

ここのほとんどの人に同意しますが、今日の言語は目前の課題によって決まります。この点であなたが限られた選択肢しかなかった時代がありました。現在、Cは主にコードの最適化が必要な組み込み/システムプログラミングドメインで使用されています。最大限に活用するには正確なコードを記述する必要があります。その抽象化を使い始めたとしても、基礎となるものは非常に堅牢でなければならないからです。Linux自体やC開発者を必要とするようなオープンソースのGNUプロジェクトを回避しようとするでしょう。Cで最初から何かを書くのではなく、これらのプロジェクトで手を試してください。これはおそらく、コードを記述して言語を学ぶより良い方法です。


実際、マイナーであったとしても、確立されたプロジェクトに最初に飛び付くことは疑わしいです。言語をゼロから学び始めるための良い方法です。あなたはで取得する可能性が高いです方法あなたの頭の上に、また、あなたがやろうと設定されたすべてであっても、単純にコードを移動しようとしているの追加負担を持つことになります理解どのようにコードの作品を。特にオペレーティングシステムカーネルは、非常に複雑なソフトウェアです。
CVn 2011

はい、しかし、私は質問者が実際にK&R本またはそのようなものを経験したと想定しています。私はPythonチャネルで質問したときにこのアプローチを推奨されました。Cでは違いますか?
Nishant 2011

厳密に言えば、それがそれほど違うのかどうかはわかりませんが、Cでは、Pythonなどの高水準言語よりも細部にまで注意を払う必要があります。一つだけ言っておくと、メモリ管理。言語を使い始めたばかりのときに、確立された潜在的に大規模なプロジェクトに飛び込むことは、そのための最良の方法ではない場合があります。
CVn 2011

0

あなたはコマンドラインから機能することができる何かをしたいでしょう。CでのGUIプログラミングは、優れた GUIフレームワークであっても、お尻の大きな痛みです。

実践的なCの学習体験に対する私のいつもの提案は、連絡先リストまたは他の単純なデータ管理アプリでした。これで、ほとんどの重要なビット(I / O、メモリ管理、テキスト処理など)がカバーされ、標準のCライブラリ以外のものを使用する必要はありません。Cにはグラフィックス、ネットワーキング、サウンド、その他1のサポートが組み込まれていないため、Cプログラミングへの最初の進出では、これらの種類のものに依存するものはすべて避けるのが最善です。

C 汎用プログラミングに使用できます。期待をやや下げなければならないだけです(1983年で、VAX 11/750に接続されたVT52の前に座っているとしたら、正しい考え方になります)。

覚えておいてください、Cにはブレードガードがなく、あなたが愚かなことをするのを妨げません。言語の定義は場所によって少し緩やかであり、そのため違法ではないが明確に定義されていない操作もいくつかあります。


1-言語標準の最新(2011)リビジョンに組み込みのスレッド化サポートが追加されました


0

Project Eulerをお勧めします。私はC ++を改善するためにそれを使用し、それは素晴らしいです。それぞれの問題は小さなタスクなので、完了するのに1時間もかからない可能性があります(少なくとも最初の問題)。

あなたはプロファイラーとスピードのためにコードを最適化することについての本を必要とするでしょう。必ず1分のルールを守ってください。1分以内に回答を得る必要があります。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.