【C言語】 static関数のプロトタイプ宣言を書くのが面倒臭いと思うのが正しい


static関数のプロトタイプ宣言を書くのが面倒くさい

#include <stdio.h>
//static関数のプロトタイプ宣言を書くのが面倒臭い
static void a1(		//業務でよく記述する関数のコメント
	int argc, 		//業務でよく記述する引数のコメント
	char *argv[]);	//業務でよく記述する引数のコメント
static void a2(		//業務でよく。。。以下略
	int argc, char *argv[]);
static void b1(int argc, char *argv[]);
static void b2(int argc, char *argv[]);
static void c1(int argc, char *argv[]);
static void c2(int argc, char *argv[]);
// main()関数を先に記述して
//「上から下に読めるように関数配置」と
// よくWEBで解説されているが、そもそも無理
int main(int argc, char *argv[]){
	a1(argc, argv);
	b1(argc, argv);
}
static void a1(int argc, char *argv[]){
	a2(argc, argv);
}

//mainを先に書く派はここまでの記述順番は同じだろうが
//次に記述する3番目の関数は a2()かb1()か
//人それぞれで違う。
static void a2(int argc, char *argv[]){
	if(argc==1)	puts(argv[0]);
}
static void b1(int argc, char *argv[]){
	b2(argc, argv);
	c1(argc, argv);
}
static void b2(int argc, char *argv[]){
	if(argc==1)	puts(argv[0]);
}
static void c1(int argc, char *argv[]){
	c2(argc, argv);
}
static void c2(int argc, char *argv[]){
	if(argc==1)	puts(argv[0]);
}

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


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

#include <stdio.h>
static void a2(int argc, char *argv[]){
	if(argc==1)	puts(argv[0]);
}
static void a1(int argc, char *argv[]){
	a2(argc, argv);
}
static void c2(int argc, char *argv[]){
	if(argc==1)	puts(argv[0]);
}
static void c1(int argc, char *argv[]){
	c2(argc, argv);
}
static void b2(int argc, char *argv[]){
	if(argc==1)	puts(argv[0]);
}
static void b1(int argc, char *argv[]){
	b2(argc, argv);
	c1(argc, argv);
}
int main(int argc, char *argv[]){
	a1(argc, argv);
	b1(argc, argv);
}

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


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

main() <int main (int argc, char *argv[]) at f3.c:15>:
    a1() <void a1 (int argc, char *argv[]) at f3.c:19>:
        a2() <void a2 (int argc, char *argv[]) at f3.c:26>:
            puts()
    b1() <void b1 (int argc, char *argv[]) at f3.c:29>:
        b2() <void b2 (int argc, char *argv[]) at f3.c:33>:
            puts()
        c1() <void c1 (int argc, char *argv[]) at f3.c:36>:
            c2() <void c2 (int argc, char *argv[]) at f3.c:39>:
                puts()

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

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


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

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