如何使用 C 中另一个头文件中定义的结构体?

Rom*_*ria 5 c include header-files

我有两个头文件 stack.h

#ifndef __STACK_H__
#define __STACK_H__



typedef struct StackElement_
{
  int value;
  struct StackElement_ *next;
} StackElement, *Stack;


/*----------------------Prototypes----------------------*/

Stack new_stack();

void push_to_stack(Stack *, int);
int pop_stack(Stack *);
int peek_stack(Stack);

int stack_length(Stack);
void print_stack(Stack);
Bool is_empty_stack(Stack);

void clear_stack(Stack);

/*------------------------------------------------------*/



#endif
Run Code Online (Sandbox Code Playgroud)

和utils.h

#ifndef __UTILS_H__
#define __UTILS_H__



#define INT_MIN -2147483648

/*------------------------Typedef-----------------------*/

typedef enum Boolean_ {
  FALSE,
  TRUE
} Bool;

/*------------------------------------------------------*/



#endif
Run Code Online (Sandbox Code Playgroud)

在 stack.h 中,我需要知道 Bool,但是当我在 stack.c 中包含 utils.h 时,stack.h 中仍然不知道该结构。如何做到这一点而无需直接在 stack.h 中定义它?

dbu*_*ush 2

源文件或包含文件应包含所有必需的文件。

因此,如果 stack.h 依赖于 util.h 中的声明,那么您应该#include "util.h"在 stack.h 中。这样,任何包含 stack.h 的模块都不需要担心还包含 util.h 并将其按正确的顺序排列。

如果一个模块决定包含两者,那也应该没问题。您添加的包含防护应该可以解决这个问题。

您没有显示 stack.c 的源代码,但您很可能在 util.h 之前包含了 stack.h。这可以解释您的问题,因为 stack.h 所需的定义出现在它们之后而不是之前。