もちろんのことですが、いかなるコーディングスタイルにおいても最重要局面となるのが空白文字です。 老眼鏡の厄介になっているようなガチガチの古参コーダーなら、タブと8文字スペースの違いについて、遥か50光年の彼方からでも話しに来るでしょう。この件について幾多の戦火が上がり、そして消えてゆきました。
QEMU のインデントはスペース4文字です。 タブは一切使いませんが、Makefile 中では構文に抜きがたく結び付けられてしまっているので例外とします。 複数のスペースがタブより良い理由は以下の通りです。
行末に空白文字をつけっぱなしにしておかないように。
各行は80文字とします。それより長くしないこと。
根拠:
変数は、名前に使われる単語をすべて小文字にし、各単語はアンダースコアで繋ぎます(lower_case_with_underscores)。入力しやすく読みやすい。 構造体の型名は、名前に使われる各単語の先頭を大文字にします(CamelCase)。入力しにくいですが目立ちます。 スカラー型は、POSIX の uint64_t やその系列のように、単語をすべて小文字にし、各単語をアンダースコアで繋ぎ、最後に t をつけます。 最後のやり方は POSIX に従っていないため、変更もありえることに注意してください。
標準ライブラリ関数のラッパーを使うとき、プレフィックス qemu_ をつけてラッパー版であることを読み手側に喚起します。それ以外の場合は qemu_ プレフィックスの使用を避けてください。
インデントされた文(statement)は、ブロック内にひとつしか文がない場合でも、すべて中括弧(brace)でくくります。 左括弧は新しいブロックの始まりとなる制御文と同じ行に置きます。右括弧は else と同じ行に置きます。else がない場合は1行を使って単体で置きます。 例:
if (a == 5) { printf("a was 5.\n"); } else if (a == 6) { printf("a was 6.\n"); } else { printf("a was something else entirely.\n"); }
例外は関数開始時の左括弧です。慣例であることならびにその明晰さから、この場合は 以下のように1行を使って単体で置きます。
void a_function(void) { do_something(); }
根拠:一貫した括弧のスタイル(関数は例外だけど…)は曖昧さを減らし、行が増えたり減ったりしたときの無用なごたごたを避ける。 さらにいえば、これが QEMU のコーディングスタイルということ。