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

标签 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 包含函数原型(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是一种顺序语言,因此如果不告诉编译器,您将永远不知道下一行有什么。

check more here

关于c - 为什么需要在 stack.c 中包含 stack.h ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40122193/

相关文章:

C 代码适用于 Mac (Darwin 13.4),但不适用于 Linux (2.6.32)

c - glTexImage2d 和 GL_R8UI 在某些 GPU 上失败

c - c中的指针和数组有什么区别?

c - 为什么我的 fread fwrite 程序不复制 C 中的第一个字符?

java - 栈为空时pop抛出什么异常

python - list.pop 的 numpy 等价物?

c - 每当打印 CURL_WRITEFUNCTION 中的 ptr 时都会输出奇怪的字符。

c++ - alloca 返回的指针的基于索引的访问和 "placement new"的效果

java - 有没有办法将 Knuth shuffle 应用于 Stack 数据结构?

java - 了解 Stack 实现问题陈述