わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

インデント,スペーシング

「先週までの授業のフォロー」かつ「明日の試験に関係のない話題」として,ソースファイルの空白文字について,取り上げておくことにします.
関数の中やifの中など,「ブロックの中」は,その前後よりも何文字か右に書きます.右に表示させるために,先頭にその字数文だけ空白文字を置きます.これが,インデントindentです.字下げとも言います.何文字目から始めるかのことを,インデントのレベルということがあります.
「ブロックの中はインデント」と覚えればいいのですが,一つだけ例外があって,switch〜caseで「値:」と書くところだけは,「switch」や「}」と同じインデントのレベルにします.
とはいっても,インデントは,Emacsをはじめ,テキストエディタにお任せするのでいいと思います.
次に,ソースコードのまとまった文字列(トークtokenといいます)の間に空白文字を書くのを,スペーシングspacingといいます.私の授業で出すコードでは,以下の箇所に空白文字を書いています.

  • 2項演算子の前後(例外あり): y = x + 1;
  • ifなどの制御文とその直後のカッコの間: if (x == 1) {
  • カッコ閉じと,その直後の中カッコ開きの間: [同上]

しかし,以下の箇所には書きません.

  • 単項演算子: x++; ++*p;
  • 関数名とその直後のカッコの間: printf("abc\n");

スペーシングは,テキストエディタが自動でやってくれるというわけにはいかず,私自身は手作業でつけたり消したりしています.
プログラムがうまく動かないとき,インデントとスペーシングに一貫性があるかを,確認してみるのはいかがでしょうか.
この確認作業を通じて,ソースファイル全体を眺めることになり,そこから,まずい記述が見つかるかもしれませんよ.