在C語言的學習過程中,我們一般把所有的代碼寫在一個文件中。隨着自身水平的提高,我們發現代碼越寫越長,代碼行數越來越多,把一個工程的所有代碼寫在一個文件中讓人看起開非常吃力。於是我們開始想把代碼中的函數歸類,同一類放在同一個文件中當中,那么如何實現將一個工程中的代碼放到不同文件中呢?這就需要寫頭文件了。下面的簡單列子將讓你學會如何寫頭文件。你也可以點擊這里下載源代碼自己研究。
假設我們需要定義一些與棧有關的函數,主程序需要調用這些函數。
首先,我們在同一文件夾中新建3個文件(要包含不同的自定義頭文件需要加上路徑,為了使用方便就在同一個文件夾下定義),名稱分別為:
main.cpp 包含主程序
stack.cpp 定義與棧有關的函數
stack.h 對stack.cpp里面的函數、結構體變量等進行聲明
然后在stack.h中添加如下代碼:
#ifndef HEADER_H_INCLUDED #define HEADER_H_INCLUDED
#include "stdio.h"
#include "stack.cpp" ///表名函數原型在,stack.cpp中,VC6.0好像不用加這句 #endif // HEADER_H_INCLUDED
在stack.cpp中包含stack.h:
#include "stack.h"
同樣在main.cpp中也包含stack.h,並添加主函數:
#include "stack.h" int main() { return 0; }
這幾步做完之后,基本框架也就完成了,下面我們開始寫我們的庫函數,例如我們要定義:
void stack_push(pSTACK &S);
pSTACK stack_pop(pSTACK &S);
bool stack_empty(pSTACK &S);
3個函數,以及一個結構體,那么這函數的原型和結構體應該寫在stack.cpp中,函數聲明和結構體聲明寫在stack.h中。
stack.cpp:
#include "stack.h" typedef struct Stack { struct Stack *next; unsigned int stack_size; }; void stack_push(pSTACK &S) { /**此處省略若干代碼**/ printf("這個函數來自stack.cpp\t"); printf("進棧\n"); } pSTACK stack_pop(pSTACK &S) { pSTACK s=NULL; /**此處省略若干代碼**/ printf("這個函數來自stack.cpp\t"); printf("出棧\n"); return s; } bool stack_empty(pSTACK &S) { /**此處省略若干代碼**/ return true; }
stack.h:
#ifndef HEADER_H_INCLUDED #define HEADER_H_INCLUDED #include "stdio.h" /***結構體聲明***/ typedef struct Stack STACK,*pSTACK; /***函數聲明***/ void stack_push(pSTACK &S); pSTACK stack_pop(pSTACK &S); bool stack_empty(pSTACK &S); #include "stack.cpp" ///表名函數原型在,stack.cpp中,VC6.0好像不用加這句 #endif // HEADER_H_INCLUDED
在main函數中調用自定義函數。
main.cpp:
#include "stack.h" int main() { pSTACK S=NULL; stack_push(S); stack_pop(S); return 0; }
輸出:
這樣一個簡單的多文件框架就實現了,點擊這里下載源代碼。