【C言語】
「変数宣言はすべて関数先頭で書け」は時代遅れ

時代遅れの 変数宣言と 初期化の場所

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

#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部構成からなる

K&RとかC89とかいう
古い時代のよくあるスタイルです。


■参照直前で変数宣言と初期化(推奨)

#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());
}

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

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