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 中定义它?
源文件或包含文件应包含所有必需的文件。
因此,如果 stack.h 依赖于 util.h 中的声明,那么您应该#include "util.h"在 stack.h 中。这样,任何包含 stack.h 的模块都不需要担心还包含 util.h 并将其按正确的顺序排列。
如果一个模块决定包含两者,那也应该没问题。您添加的包含防护应该可以解决这个问题。
您没有显示 stack.c 的源代码,但您很可能在 util.h 之前包含了 stack.h。这可以解释您的问题,因为 stack.h 所需的定义出现在它们之后而不是之前。