はい、そのヘッダーを複数の領域に含めるのは悪い習慣です。つまり、インクルードが行うことは次のとおりです。コンパイラが #include を検出すると、コンパイラはその領域にあるすべてのコードを取得し、その #include がある場所に挿入します。複数の cpp ファイルをまとめてコンパイルする場合、または同じファイルを #include するファイルを #include する場合。これにより、コードのチャンクが複数回挿入され、プログラムのサイズが不必要に増加します。もう 1 つの良い方法は、ヘッダー ファイルで #ifndef...#endif を大規模なプログラムに使用することです。次のようになります。
次のようにコード化された person.h ファイルがあるとします。
#ifndef PERSON_H_
#define PERSON_H_
#include <stdio.h>
#include <stdlib.h>
typedef char NAME[41];
typedef struct date {
int month;
int day;
int year;
} DATE;
typedef struct person {
NAME name;
int age;
float height;
DATE bday;
} PERSON;
#endif
これは、コンパイルのプリプロセッサ段階で行われます。PERSON_H_ が定義されていない場合は、それを作成し、その PERSON_H_ トークンの下の #define と #endif の間のすべてを関連付けます。これで、プリプロセッサは #include "person.h" に遭遇するたびに、PERSON_H_ が既に存在するかどうかを確認します。存在する場合は、PERSON_H_ に関連付けられたコードを再度含めません。これにより、ヘッダー ファイルのインクルードなどによって関数を複数回定義することを防ぎます。
ヘッダー ファイルで関数を定義することをお勧めします。これらは関数プロトタイプと呼ばれます。それらは、期待する関数をコンパイラに伝えます。そして、プロトタイプはあなたがしたものとは少し異なります。変数名を宣言する必要はなく、宣言だけです。したがって、関数プロトタイプは次のようになります。
char *BoyerMoore_skip(char *, int );
それ以外の
char *BoyerMoore_skip(char *string, int strLength);