C言語入門::分割コンパイル
そのまえに,残っているものを片付けておきましょう
列挙体
定数に名前を付けたいときに列挙体が使えます.プリプロセッサのdefineでも出来ますが….
enum weekday {sun, mon, tue, wed, thu, fri, sat};
こうかくとsun=1,mon=2,tue=3…となります.sun=0,mon=1としたい場合は,
enum weekday {sun=0, mon, tue, wed, thu, fri, sat};
と書きます.
自動変数
変数宣言時に型の前にautoを付けると自動変数というものになります.自動変数は,その変数が存在している関数が呼び出された時点で生成されて関数の終了とともに消滅します.って,どこかで聞いた説明ですね.
実は今まで使っていたローカル変数は自動変数です.autoを省略していたわけですね.むしろautoをつけているプログラムがなかなか無いような気がしますが.
volatile
これは,普通のプログラムではあまり使いませんが,マイコンのプログラムを書いていると良く見かけます.
プログラムの外から変数の内容が変更される可能性がある場合は,変数宣言時にvolatileを付けます.プログラムの外から変更されるとはどういうことかというと,変数がマイコンの入出力ピンに直接割り当てられているような場合です.プログラムで何もしなくても,外部の回路によって電圧が操作されて変数の内容も変化します.
あと,マルチスレッドのプログラムで他のスレッドから変更されるデータにもvolatileをつけたりします.
volatileが付いた変数や関数に関係する部分ではコンパイラが最適化を行いません.最適化を行うと,高速化するために変数へのアクセスが最初の一度以外はレジスタ同士の演算に置き換えられてしまったりするためです.本当ならば値が変化するはずでも,レジスタにコピーされた値を参照している限りは,変化がわかりません.場合によっては,最適化によって変数を監視するループごと別のコードに置き換えられたりします.
分割コンパイル
他のソースファイルから関数や変数を隠す.static
複数のソース間でグローバル変数を共有する.extern
ちょっとした小話
そろそろ終わりかな.
そろそろC言語が分かってきたと思います.でも,何か書いてみようと思うと,どうして良いか分からないという人も多いはずです.
それもそのはず,C言語をいくら勉強しても凄いプログラムが書けるようになったりはしません.日本語を一生懸命勉強しても,面白い小説は書けないでしょう.今までやってきたのは,小説にたとえるなら日本語の文法とか段落の作り方を勉強してきたわけです.
プログラムを書くためには,アイディアも必用ですが,他にもたくさんの知識が必要です.アルゴリズムが載っている本を見るのも良いし,人が書いたプログラムを色々と読むのも良いでしょう.
この文書の履歴
- 2006-04-XX まだ未公開