【C言語】static関数のプロトタイプ宣言を書くな
(プロは無駄なコードを書かない)

static関数の プロトタイプ宣言を書くな

static関数宣言を書いてバグる

#include  <stdio.h>

static int func();//関数宣言

int main(void){
    printf("%d\n",func());
    printf("%d\n",func(1));
    printf("%d\n",func(1,2));
    printf("%d\n",func(1,2,3));
}

//関数定義
extern int func(int a,int b,int c){
        return  a+b+c;
}

このコードは、
3行目にstatic 関数宣言がありますが
古い形式の関数宣言なので
引数チェックをしません。

static int func();
➡古いK&R形式の関数宣言

static int func(void);
➡新しいプロトタイプ関数宣言

引数チェックをしないので
関数コールと関数定義で引数の数が違っても
コンパイル出来てしまい、
間違いに気が付きません。


static関数プロトタイプ宣言が面倒

#include <stdio.h>
/*関数プロトタイプ宣言*/
static void a1(
    void//業務でよく記述する関数引数のコメント
);
static void a21(
    void//業務でよく記述する関数引数のコメント
);
static void a22(
    void//業務でよく記述する関数引数のコメント
);
static void b1(
    void//業務でよく記述する関数引数のコメント
);
/*関数の定義*/
int main(void){
    puts(__func__);
    a1();
    b1();    
}
static void a1(void){
    puts(__func__);
    a21();
    a22();
}
static void a21(void){
    puts(__func__);
}
static void a22(void){
    puts(__func__);
}
static void b1(void){
    puts(__func__);
}

業務で、
「ソースコードを上から下へ読めるようにmain()関数を上に書く」とルール化して、
static関数のプロトタイプ宣言を
何百行もコメント付きで記述するプロジェクトは多いですが、
無駄です。

そもそもC言語は関数コールがバンバン発生するので小説のように上から下へ読めません。


呼び出しより先にstatic関数定義するとプロトタイプ宣言は書かなくてOK

#include <stdio.h>
static void a21(void){
    puts(__func__);
}
static void a22(void){
    puts(__func__);
}
static void a1(void){
    puts(__func__);
    a21();
    a22();
}
static void b1(void){
    puts(__func__);
}
int main(void){
    puts(__func__);
    a1();
    b1();    
}

関数の定義がプロトタイプ宣言を兼ねるので
同じ事を2回書かなくて済むので楽です。


static関数のプロトタイプ宣言を書いている暇のある人は

●Visual Studio Code環境の人は以下を学習
(1)F12キーの使い方
(2)”呼び出し階層の表示”

●Linux系環境の人は以下を学習
(1)cflow コマンドの使い方
(2)vim+ctagsコマンドの使い方
 ⇒CTRL+]によるタグジャンプ

main() <int main (void) at f1.c:16>:
    puts()
    a1() <void a1 (void) at f1.c:21>:
        puts()
        a21() <void a21 (void) at f1.c:26>:
            puts()
        a22() <void a22 (void) at f1.c:29>:
            puts()
    b1() <void b1 (void) at f1.c:32>:
        puts()

まとめエディタのタグジャンプ機能を学習しよう。

プロトタイプ宣言と関数定義で
同じ事を2回書く暇があれば、
エディタのタグジャンプ機能を学習しよう。


アンケート

7
貴方はstatic関数のプロトタイプ宣言をどうしてますか?