C言語編 目次

 関数設計

 

・関数名の命名規則
・プログラミングに出る!英単語

 ポインタ

 

・データ型とポインタ

 データ型

 

・char *とconst char *は違う
・符号付きと符号なし

 演算子

 

・三項演算子とデータ型の問題

 制御構文

 

・条件式で代入する
・三項演算子を使ったswitch

 構造体

 

・構造体のサイズとアライメント
・構造体メンバのサイズを知る

 配列

 

・配列使用時の注意
・配列の要素数を知る

 メモリ管理

 

・メモリスタック
・動的メモリ確保とメモリリーク

 モジュール設計

 

・モジュール分割
・汎用モジュールとアプリ依存モジュール

 パフォーマンス
  徹底チューニング

 


・どんな処理に時間がかかるのか
・ファイル入出力の効率化
・アルゴリズムを考える1
・アルゴリズムを考える2

 プリプロセッサの便利機能


・2重インクルード防止

 


トップページへ戻る

配列使用時の注意

 今回のテーマは、配列使用時の注意です。最初に言っておくと、これは非常に重要です。(「非常に」「重要」という言葉を普段管理人はあまり使いませんが、ここだけは使っておきます。)これは、単なるテクニックにとどまらず、Cプログラムの品質を根幹から支えると言ってもいいくらいのテクニックです。

 なぜかというと、C言語のプログラムのバグの原因の代表格が、「配列の要素を超えた不正アクセス」だからです。しかもこれをやると一発でプログラムがアボートしたり、意図しないメモリ領域を書き換えたりして、原因究明が困難になったりします。

 配列を作るときは、その要素数を変数として持ちます。これについては、「配列の要素数を知る」を見てください。

 Cのプログラムに熟練してくるほど、なるべく配列は使わないようになってきます。それは、配列の要素を超えた不正アクセスがバグの原因になることが圧倒的に多いことを、経験的に知っているからです。配列の添え字に対して入り組んだ計算をするなんていうのは、ほぼ自殺行為だと言ってもいいでしょう。

 関数の引数に配列を渡したり、2次元配列を使うような場面が出てきたら、本当にそうしなければならないのか、もう一度よく考えてみましょう。大抵の場合は、もっと原始的に作ることができます。

 また、C++を使うと、このような心配をする必要がなくなります。詳しくはここでは説明しませんが、もっと高度でバグのないプログラムを作りたいと思ったら、C++を習得することをお勧めします。