「先週までの授業のフォロー」かつ「明日の試験に関係のない話題」として,ソースファイルの空白文字について,取り上げておくことにします.
関数の中やifの中など,「ブロックの中」は,その前後よりも何文字か右に書きます.右に表示させるために,先頭にその字数文だけ空白文字を置きます.これが,インデントindentです.字下げとも言います.何文字目から始めるかのことを,インデントのレベルということがあります.
「ブロックの中はインデント」と覚えればいいのですが,一つだけ例外があって,switch〜caseで「値:」と書くところだけは,「switch」や「}」と同じインデントのレベルにします.
とはいっても,インデントは,Emacsをはじめ,テキストエディタにお任せするのでいいと思います.
次に,ソースコードのまとまった文字列(トークンtokenといいます)の間に空白文字を書くのを,スペーシングspacingといいます.私の授業で出すコードでは,以下の箇所に空白文字を書いています.
- 2項演算子の前後(例外あり): y = x + 1;
- ifなどの制御文とその直後のカッコの間: if (x == 1) {
- カッコ閉じと,その直後の中カッコ開きの間: [同上]
しかし,以下の箇所には書きません.
- 単項演算子: x++; ++*p;
- 関数名とその直後のカッコの間: printf("abc\n");
スペーシングは,テキストエディタが自動でやってくれるというわけにはいかず,私自身は手作業でつけたり消したりしています.
プログラムがうまく動かないとき,インデントとスペーシングに一貫性があるかを,確認してみるのはいかがでしょうか.
この確認作業を通じて,ソースファイル全体を眺めることになり,そこから,まずい記述が見つかるかもしれませんよ.