2016-10-19 12 views
0

スタック要素型stack_entryの定義とともに機能のプロトタイプから成るアレイベースなぜstack.cをstack.cに含める必要がありますか?

#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の実装レベル。

#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.c"ファイルを含める必要がありますか?

+6

'typedef'、' define'、 'struct'の定義については、 – user975989

+3

関数の宣言とその実装が一致することを確認します。 –

+0

インクルードなしでコンパイルしようとすると、コンパイラがあなたに伝えます:) –

答えて

0

あなたはstack.hを追加する必要がありますあなたのtypedefdefinestruct

methodsそれではせずに、これらの情報のいずれにもアクセスできなくなります。

それはあなたの主な機能以下のメソッドを宣言し、上の階のメインの彼の署名を宣言していない、あなたは..だから

にアクセスすることができない場合は、このすべてがすべてで起こる同じであるあなたがで使用するファイルが含まれますあなたのファイルの先頭に..

忘れないでください。Cは逐次的な言語なので、コンパイラに知らせないと次の行に何があるのか​​分かりません。

check more here

0

最初に、ヘッダーファイルに "stdio.h"を含めないでください。あなたはそれを使用しません。それを使用しているソースファイルに含めます。 "struct stack"と "define"のヘッダファイルをインクルードする必要があります。このファイルは、すべての宣言を持っている誰があるので

関連する問題