2012/06/05

コーディングスタイル

世の中にはプログラマの数だけコーディングスタイルがあると思うけど、 Linux カーネルのコーディング規約 と対比しながら、自分のコーディングスタイルを晒してみる。
勿論これはスクラッチで自分が自由に作成出来る場合のスタイルであって、 プロジェクトなどによりコーディング規約が定まっている場合や 他人が作成したソースを修正する場合は基本的にはそのスタイルに合わせる。

インデント
linux コーディング規約とは完全に意見を異にするが、 基本的にタブは 4 文字にしている。
通常の 80 カラムのディスプレイで見たときに タブが 8 文字だと間延びして見えてしまう事と、 ネストが 3 段以上になると格段に見づらくなる事が主な理由。
勿論、「3 段以上のネストは悪い」という意見は 原則的に賛成だが、 そうは言っても実際はもっと深くネストする事が 避けられない場面も多々ある。

case
linux コーディング規約とは若干異なっていて、 switchcase はインデントさせている。
深い理由はないのだが何となく見やすいと思う。
    swich(suffix){
        case 'G':
        case 'g':
            mem <<= 30;
            break;

        case 'M':
        case 'm':
            mem <<= 20;
            break;

        case 'K':
        case 'k':
            mem <<= 10;
            /* fall through */

        default:
            break;
    }
            

1行に複数の文を書かない
これは linux コーディング規約に賛成。
特に if に続くセンテンスは必ず改行して書いて欲しい所だ。
    if(condition)
        do_this;
    do_something_everytime;
            

インデントはタブを利用する
これも linux コーディング規約に賛成。

まともなエディタを利用する
何を「まとも」とするかで宗教戦争が勃発しちゃいそうだが、 例えば 1 行を 80 カラム以上で横にスクロールさせながら表示する エディタは使って欲しくないと思う。 そういうエディタを使っていると往々にして 1 行が 80 カラム以上の見づらいソースになりがちだから。

行の長さは 80 カラムが限界で強く推奨される
これも linux コーディング規約におおむね賛成。
ただし分割した 2 行目以降を 「かなり短く、かなり右におく」 事はしない。
基本的には 1 行目の先頭からタブ 1 個から 2 個分 右にインデントした位置にしている。
    if(condition)
        printf(KERN_WARNING "Warning this is a log printk with "
                "3 parameters a: %u b: %u c: %u\n",
                a, b, c);
    else
        next_statement;
            

ブレースの位置
これも linux コーディング規約におおむね賛成。
ifswitchforwhiledo においてはブロックの開始行の行末に開きブレース、 ブロックの最終行の行頭に閉じブレースというスタイルで書いている。 関数定義のブレースについての書き方も同様に賛成で、 開きブレースは次の行の行頭に書いている。
ただし else 節を開始する開きブレースは 昔から次の行の行頭に置くクセがあるので今でもそのまま書いている。
    /* 関数定義 */
    int     function(int i)
    {

        body;

    }

    /* for 文 */
    for(i=0; i<max; i++){
        do_condition_1;
        do_condition_2;
    }

    /* while 文 */
    while(condition){
        do_condition_1;
        do_condition_2;
    }

    /* do ~ while 文 */
    do{
        do_condition_1;
        do_condition_2;
    }while(condition);

    /* if ~ then ~ else 文 */
    if(condition == 1){
        do_condition_1_1;
        do_condition_1_2:
    }
    else if(condition == 2){
        do_condition_2_1;
        do_condition_2_2:
    }
    else{
        do_condition_other_1;
        do_condition_other_2:
    }
            

必要のないブレースを使わない
これも linux コーディング規約に賛成。
特に if の後ろには単文でも必ずブレースを使う人がいるが、 ソースが煩雑になるので不要なブレースは省略している。
    if(condition)
        this();
    else
        otherwise();
            

長くなってしまったので今回はここまで。
(多分)続く…


Copyright © 2008-2020 Mitzyuki IMAIZUMI. All rights reserved.