使用多个 .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。
我想知道在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。