コードをいくつかのライブラリに分割してください。
あなたが持っている1つのファイルで例を見てみましょう:
#include <stdio.h>
int something() {
return 42;
}
int bar() {
return something();
}
void foo(int i) {
printf("do something with %d\n", i);
}
int main() {
foo(bar());
return 0;
}
これを次のように分割できます:
mylib.h:
#ifndef __MYLIB_H__
#define __MYLIB_H__
#include <stdio.h>
int bar();
void foo();
#endif
注意: 上記のプリプロセッサ コードは「ガード」と呼ばれ、このヘッダー ファイルを 2 回実行しないようにするために使用されるため、複数の場所で同じインクルードを呼び出すことができ、コンパイル エラーは発生しません。
mylib.c:
#include <mylib.h>
int something() {
return 42;
}
int bar() {
return something();
}
void foo(int i) {
printf("do something with %d\n", i);
}
myprog.c:
#include <mylib.h>
int main() {
foo(bar());
return 0;
}
それをコンパイルするには:
gcc -c mylib.c -I./
gcc -o myprog myprog.c -I./ mylib.o
今の利点は?
- コードを論理的に分割し、コード単位をより速く見つけることができます
- これにより、コンパイルを分割し、何かを変更したときに必要なものだけを再コンパイルできます (これが Makefile の役割です)。
- 一部の関数を公開し、他の関数を非表示にすることができます (上記の例の「something()」など)。また、コードを読む人 (教師など) のために API を文書化するのに役立ちます;)