基于数组的实现级别
#include "stack.h"
void creat_stack(Stack *s) {
s->Top = 0;
}
int isFull(Stack s) {
return (s.Top == Max ? 1 : 0);
}
int isEmpty(Stack s) {
return (s.Top == Max ? 1 : 0);
}
void push(stack_entry e, Stack *s) {
if (!isFull(*s))
s->entry[s->Top++] = e;
else
printf("Error : Stack Overflow\n");
}
void pop(stack_entry *e,Stack *s) {
if(!isEmpty(*s))
*e = s->entry[s->Top--];
else
printf("Error : Stack Underflow\n");
}
头文件 stack.h 包含函数原型(prototype)以及堆栈元素类型 stack_entry 的定义。
#pragma once
#include <stdio.h>
#define Max 10
typedef char stack_entry;
typedef struct Stack{
int Top;
stack_entry entry[Max];
}Stack;
void creat_stack(Stack *s);
int isFull(Stack s);
int isEmpty(Stack s);
void push(stack_entry e,Stack *s);
void pop(stack_entry *e, Stack *s);
所以我的问题是为什么我必须在“stack.c”文件中包含头文件“stack.h”??
最佳答案
您应该必须添加 stack.h
,因为该文件包含您的 typedef
define
struct 的所有声明
和方法
因此,如果没有那时,将无法访问任何这些信息。
同样的,如果你在main函数下面声明了一个方法,而没有在main楼上声明他的签名,你就无法访问..
因此,所有这一切都发生在您在文件顶部使用的所有包含文件中。
不要忘记C
是一种顺序语言,因此如果不告诉编译器,您将永远不知道下一行有什么。
关于c - 为什么需要在 stack.c 中包含 stack.h ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40122193/