为什么需要在stack.c中包含stack.h?

时间:2016-10-19 04:32:53

标签: c stack

基于数组的实现级别

#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,它包含函数的原型以及堆栈元素类型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);

所以我的问题为什么我必须包含头文件&#34; stack.h&#34;在&#34; stack.c&#34;文件??

2 个答案:

答案 0 :(得分:0)

首先,不要包括&#34; stdio.h&#34;在头文件中,无论如何你都不会在那里使用它。将它包含在您使用它的源文件中。 您需要包含&#34; struct stack&#34;的头文件。和#34;定义&#34;。

答案 1 :(得分:0)

您必须添加stack.h,因为此文件包含typedef define structmethods

的所有声明

所以没有那个,将无法访问任何这些信息。

如果你在main函数下面声明一个方法并且不在楼上声明他的签名,那么你就无法访问..

所以,所有这些都发生在您在文件顶部使用的所有包含文件中。

不要忘记C是一种顺序语言,所以如果你不告诉编译器,你永远不会知道下一行有什么。

check more here