是的,如果您在多个区域中包含该标题,这是一种不好的做法。所以包含的作用是这样的:每当编译器看到#include 时,它所做的就是获取位于该区域中的所有代码并将其插入到#include 所在的位置。现在,如果您正在一起编译多个 cpp 文件,或者 #include 文件 #include 相同的文件。这会多次插入该代码块,这会不必要地增加程序的大小。另一个好的做法是在头文件中为大型程序使用#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);