c# C -使用不同类型重定义Typedef [重复]

5anewei6  于 2023-01-22  发布在  C#
关注(0)|答案(2)|浏览(228)
    • 此问题在此处已有答案**:

How to split a C program into multiple files?(1个答案)
42分钟前就关门了。
让我们以我的项目为例:
我有两个文件,file1.cfile2.c。这两个文件都有一个头文件(file1.hfile2.h)。我还有一个struct. h文件,其中包含:

typedef struct {
    char region[80];
    int startDate;
    int endDate;
    int startTime;
    int endTime;
} Schedule;

两个头文件(file1.hfile2.h)都包含struct. h,而main. c包含file1.hfile2.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.hfile2.h都从struct. h声明了它们自己的公共结构体。
有解决这个问题的办法吗?

ojsjcaue

ojsjcaue1#

处理此问题的标准方法是将struct.h中的定义包含在#if#ifdef预处理器指令中,以避免在多次包含该文件时出现重复定义。这通常称为include guards

结构h

#ifndef STRUCT_H_INCLUDED
#define STRUCT_H_INCLUDED

typedef struct {
    char region[80];
    int startDate;
    int endDate;
    int startTime;
    int endTime;
} Schedule;

#endif /* STRUCT_H_INCLUDED */

您应该在所有包含文件上使用此方法,以防止在许多情况下导致编译错误的冗余定义。

dced5bon

dced5bon2#

当包含其他文件单元时,这是一个非常常见的问题,解决方案是始终在头文件中使用包含保护,例如:

// struct.h
#ifndef INCLUDED_STRUCT_H
#define INCLUDED_STRUCT_H

typedef struct {
  char region[80];
  int startDate;
  int endDate;
  int startTime;
  int endTime;
} Schedule;

#endif

有了这个include guard,在您的main.c中,即使它同时包含file1.hfile2.h,也只有struct的定义。

相关问题