【C言語】
C99仕様の変数宣言と初期化

警告:時代遅れのとりあえず0で初期化


■時代遅れの変数宣言と初期化(非推奨)

#include <stdio.h>
//スタブ関数
int get_x(void){return 2;}
int get_y(void){return 3;}
int get_z(void){return 4;}

//体積積を求める
int get_volume(void){ 
    //1.関数の先頭で変数宣言  */
    int     x;
    int     y;
    int     z;
    int     volume;
    
    //2.とりあえず0で初期化
    x = 0 ;
    y = 0 ; 
    z = 0 ;
    volume = 0;

    //3.本処理で値設定
    x = get_x();
    if(x < 0)
        return  -1;
    y = get_y();
    if(y < 0)
        return  -1;
    z = get_z();
    if(z < 0)
        return  -1;
    volume = x * y * z;
    
    return  volume;
}
int main(void){
    printf("体積 = %d\n",get_volume());
}

(1)関数の先頭で変数宣言
(2)とりあえず0で初期化
(3)本処理で値設定
の3部構成からなる
C89仕様時代のよくあるスタイルです。

■変数宣言時にとりあえず0で初期化

#include <stdio.h>
//スタブ関数
int get_x(void){return 2;}
int get_y(void){return 3;}
int get_z(void){return 4;}

//体積積を求める
int get_volume(void){ 
    //1.変数宣言と同時にとりあえず0で初期化
    int     x = 0;
    int     y = 0;
    int     z = 0;
    int     volume = 0;

    //2.本処理で設定
    x = get_x();
    if(x < 0)
        return  -1;
    y = get_y();
    if(y < 0)
        return  -1;
    z = get_z();
    if(z < 0)
        return  -1;
    volume = x * y * z;
    
    return  volume ;
}
int main(void){
    printf("体積 = %d\n",get_volume());
}

int x=0;のように
変数宣言と同時に
とりあえず0で初期化する
スタイルです。

とりあえず0で初期化しているので
未初期化の警告は出ません。
つまり本処理で設定を忘れても
警告が出ません。


■参照直前で宣言と設定(推奨)

#include <stdio.h>
//スタブ関数
int get_x(void){return 2;}
int get_y(void){return 3;}
int get_z(void){return 4;}

//体積積を求める
int get_volume(void){ 
    //変数参照直前で変数宣言と同時に値設定
    int x = get_x();
    if(x < 0)
        return  -1;
    int y = get_y();
    if(y < 0)
        return  -1;
    int z = get_z();
    if(z < 0)
        return  -1;
    return  x * y * z;
}
int main(void){
    printf("体積 = %d\n",get_volume());
}

変数を参照する直前で
有効値を設定しているので
変数スコープも狭く読みやすくなっています。

宣言と同時に値設定するので
未初期化リスクも極めて低いスタイルです。