- 此问题在此处已有答案**:
How to split a C program into multiple files?(1个答案)
42分钟前就关门了。
让我们以我的项目为例:
我有两个文件,file1.c和file2.c。这两个文件都有一个头文件(file1.h和file2.h)。我还有一个struct. h文件,其中包含:
typedef struct {
char region[80];
int startDate;
int endDate;
int startTime;
int endTime;
} Schedule;
两个头文件(file1.h和file2.h)都包含struct. h,而main. c包含file1.h和file2.h。
#include <stdio.h>
#include "file1.h"
#include "file2.h"
int main() {
/* function from file1.h */
int num1 = sum(1, 3);
/* function from file2.h */
int num2 = mul(4, 5);
}
现在,在main. c中,我得到了错误:我假设这个错误是因为file1.h和file2.h都从struct. h声明了它们自己的公共结构体。
有解决这个问题的办法吗?
2条答案
按热度按时间ojsjcaue1#
处理此问题的标准方法是将
struct.h
中的定义包含在#if
或#ifdef
预处理器指令中,以避免在多次包含该文件时出现重复定义。这通常称为include guards。结构h:
您应该在所有包含文件上使用此方法,以防止在许多情况下导致编译错误的冗余定义。
dced5bon2#
当包含其他文件单元时,这是一个非常常见的问题,解决方案是始终在头文件中使用包含保护,例如:
有了这个include guard,在您的
main.c
中,即使它同时包含file1.h
和file2.h
,也只有struct
的定义。