42

C の基本的な知識はある程度あります (C++ についても少し知識があります)。K&R のコピーを入手したので、それを使用して言語をさらに深く掘り下げたいと思っています。C の機能と標準ライブラリのほとんどを使用することを含む良いアイデアは何ですか? また、C89 と C99 のどのような重要な違いに注意する必要がありますか?

編集:言及するのを忘れましたが、これは初心者にとってほとんど実行できるはずです。プログラミングのチュートリアルを求めているわけではありません。むしろ、中規模の何か。OS関係がCの主な目的の1つであることは理解していますが、それは複雑すぎませんか?

また、質問を読んで回答することは常に良い考えですが、実際の練習をして、何かを実行するプログラムを作成したいと考えています。

4

15 に答える 15

67

プログラミング言語を実装します。これはそれほど難しいことではありません-私は名前を付けてはならない言語をしました-しかしそれはあなたにCの重要な部分の多くを学ぶことを強制します。あなたがレクサーやパーサーを書きたくないのなら自分自身では、lex/flexとyacc/bisonを使用できますが、それを計画している場合は、やや小さなプロジェクトから始めたいと思うかもしれません。

あなたが持っているいくつかのプログラムを高級言語で取り、それを書き直してください。頻繁に使用するPerl/Python / Ruby / Bashスクリプトがあり、実行中に遅延時間が発生する場合は、パフォーマンスに重点を置いてCで書き直してください。

ただし、Cを学習するプログラムを作成している場合は、車輪の再発明を行う方がよいと思います。Cでのプログラミングは、ホイールの作成と調整がすべてです。ホイールを抽象化するライブラリを使用してCを学習するだけの場合は、実際にはCを学習していません。 Cの実際のプロジェクトでは、必ず、車輪の再発明を行わないでください。ただし、これを学習するために行う場合は、必ず、車輪の再発明を学習してください。

于 2009-08-10T22:25:09.287 に答える
30

StackOverflow で C に関する質問を読んで回答することは、言語の詳細を学ぶ良い方法です。

于 2009-08-10T21:52:27.060 に答える
16

これらを介して作業することをお勧めします:http://projecteuler.net/。もちろん、ブルートフォースにかかる時間を把握するために、Cでこれらの一部を非効率的に実行すると役立つ場合があります。次に、もっと賢い方法を考え出して、Cの美しさがうまくいくのを実際に見てみてください!

于 2009-08-10T22:24:51.847 に答える
7

簡単な文法言語の通訳。もちろん、それを面白くするためにレクサー/パーサジェネレータを使用するべきではありません。

于 2009-08-10T22:20:53.460 に答える
6

チェスゲームを作る. 単純なコンソールでも実行できるため、これは非常に簡単です。ロジックを実装したり、データ構造を使用したり、ポインターを操作したりできます。スコアを保存して、永続性を操作できるようにします。

于 2009-08-11T18:32:51.217 に答える
4

あなたが行きたい深さに応じて、多分運命

于 2009-08-10T21:50:10.247 に答える
4

ハードウェア (組み込みマイクロプロセッサ システム) とオペレーティング システムのカーネル コード?

于 2009-08-10T21:52:17.760 に答える
4

私が新しい言語を学びたいと思ったとき、私はいつも役に立つユーティリティを考え出し、それを書いています。使用される実際のプログラムを作成することは、概念の証明以上のものを教えてくれることがわかりました。

たとえば、指定されたディレクトリから開始して、すべてのファイルのリストを作成し、それらに対して何かを実行するプログラムを作成できます。同様に、指定されたサイズより大きいすべてのファイルの簡単なリストを提供します。次に、フィルターを追加して、完了したらそれを使用してディレクトリをクリーンアップできるようにする方法を理解します。「バックアップ」という単語または tmp を含むファイルを検索する場合があります。ポインターをポインターに渡す関数を少なくとも 1 つ用意して、それらの感覚をつかむことを忘れないでください。

はい、スクリプトとして実行できることは知っていますが、独自のものにカスタマイズすることもできます。

于 2009-08-10T22:35:09.267 に答える
2

このような状況で実装する私のお気に入りのプログラムは、かなり基本的な構文を使用しますが、言語の多くの低レベル機能を使用する正規表現マッチングプログラムです(Cはかなり低レベルの言語であるため、それらのほとんどです) 。

于 2009-08-11T00:05:08.290 に答える
2

c でhttp://projecteuler.net/はどうですか?それはいくつかの脳細胞を誘発するはずです:)

于 2009-08-12T07:54:59.970 に答える
1

単純なデータベース アプリケーション (連絡先リスト、映画、アルバムなど) も良いプロジェクトかもしれません。これには、ファイル I/O、インタラクティブ I/O、メモリ管理、かなり肉厚なデータ構造などが含まれます。

于 2009-08-11T18:19:09.123 に答える
1

カーネルハッキングを行う

sudo apt-get install git-core
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git linux-2.6

私はubuntuを使用しているので、apt-getを実行しました.gentooも使用しています.コマンドは# emerge dev-util/git

于 2009-08-10T22:49:46.803 に答える
0

2006 ICFP コンテストの問題は信じられないほど楽しかったです。最初の部分である仮想マシンの実装は、C がまだ適しているような小さな問題です。ただし、標準ライブラリの多くは教えてくれません。

于 2009-08-10T23:19:43.747 に答える
0

言語の違いはあまり気にしないでください。それらの多くはありませんが、それでもです。(私は2年間cを書いていますが、まだ標準が何であるかを知りません。サポートされていないコンパイラを入手した場合、コードを修正するのに数分かかります)

発生する可能性のある最もイライラすることの 1 つは、通常、 for(int i;i<2;i++); のようにコードの途中で値を定義することです。c++ 仕様のみと見なされるループ。それが私が直面していたものでした。クロスコンパイルでは、その標準的な違いをはるかに苛立たせる他のものが見つかります。

C で始める場合は、アルゴリズムとオペレーティング システムまたは組み込みシステムを学習することをお勧めします (ロー/ミッド エンドの組み込みシステムでは、依然として最も一般的な言語の c)。

たとえば、microchip、atmel、または freescale からハードウェアを入手して、組み込み RTOS サポートを確認してください。

于 2009-08-10T22:38:41.660 に答える
0

たぶん、bigfiles.c と man 3 fts の使用 (ファイル階層のトラバース) を参照 (および改善) します。

http://codesnippets.joyent.com/posts/show/1888

于 2009-08-12T07:27:37.843 に答える