使用多个 .h 文件时在哪里做 typedef

Where to do a typedef when using multiple .h files

我想知道在c语言中使用多个.h文件时需要在哪里做typedef。我有一个项目要做,并决定将函数分成两个单独的 .c 和 .h 文件,以便更容易找到某个函数。但我遇到的问题是我需要使用 typedef 定义两种类型,并且两个头文件都需要知道这种类型是什么,否则我会收到错误消息,说类型未知或类似的东西。我试过将 typedef 放在一个单独的 .h 文件中。

//in type.h
typedef struct
{
    int val;   /*Valeur de la case (0 si vide)*/
    int n_candidats;  /*Nombre de candidats possibles*/
    int candidats[9];  /*liste de candidats*/
} T_case;

typedef struct
{
    T_case grille[81]; /*vecteur de 81 cases*/
} T_sudoku;

但是当我将它包含在我的其他 .h 文件中时它不起作用,它会出现大量错误,例如,T_case 之前已在此处定义,.. 的类型冲突,注意:预期“T_sudoku”但参数类型为“T_sudoku”。

问题可能是由于将.h 文件包含在多个.c 文件中所致。 尝试像这样制作 .h 文件

#ifndef FILENAME_H
#define FILENAME_H

/// put all the definitions of the .h file here
#endif

问题是,您多次包含 type.h(例如,在其他 header 中以及在 .c 文件中)。因此,有多个类型定义。

要解决此问题,请在 header 文件的顶部使用 include guard or #pragma once