C 語言初學教材 - 第六章 設計自己的標頭檔
- Get link
- X
- Other Apps
C 語言初學教材 - 第六章 設計自己的標頭檔
我們已經陸陸續續發展許多不同功能的程式,包括有關登入程式、帳號管理、通訊錄資料等的相關處理,有些已經寫成可以直接應用的函數,現在是時候把這三個程式模組整合在一起了。整合的方式,說來也簡單,我們自己設計自己的標頭檔,把引入標準函數庫、常數定義、結構定義、函數原型的宣告都放在標頭檔之中。
所謂的標頭檔也就是另一個 .h 的檔案,以下為標頭檔的內容
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define SIZE 100
#define LEN 20
#define NAME_SIZE 15
enum state {EXIT, RUN, WRONG_NAME, WRONG_CODE, Y, N};
// 自訂的時間格式
struct my_tm {
int year;
int month;
int day;
int hour;
int isam;
int hourt;
int min;
int sec;
};
// 記錄好友資料的結構
struct friendData {
char name[NAME_SIZE];
int age;
int sex;
int relation;
};
// 暫存在記憶體中的資料結構:鏈結串列
struct linkedListNode {
struct friendData data;
struct linkedListNode *nextPtr;
};
typedef struct my_tm My_Time;
typedef struct linkedListNode LinkedListNode;
// 登入程式模組的函數原型
void login(void);
My_Time myTimeS(time_t seconds);
void sayHello(My_Time *tPtr, char *name);
// 管理帳號模組的函數原型
int manage(int counter, char id[LEN], char code[LEN]);
void printList(char id[LEN], char code[LEN]);
void si(char id[LEN], char code[LEN]);
int ssearch(char array[LEN], int size, char *target);
int di(int counter, char id[LEN], char code[LEN]);
int so(char id[LEN], char code[LEN]);
void ssort(char array[LEN], char code[LEN], int size);
// 通訊錄模組的函數原型
void frienddata(char *name);
int prompt(void);
void addfriend(LinkedListNode **startPtr);
void printList2(LinkedListNode *currentPtr);
/* 《程式語言:教學誌》的範例程式
http://pydoing.blogspot.com/
檔名:itm.h
功能:整合程式模組的標頭檔
作者:張凱慶
時間:西元2010年7月 */
我們把登入程式的部份移出函數 main() ,另寫一個 login() 處理登入事項, myTimeS() 轉換時間格式, sayHello() 印出現在時間,也向使用者說哈囉。
若是使用者以管理員帳號登入,在 login() 裡呼叫 manage() 進行管理帳號的工作,這裡相關的函數我們都已經看過。
若是使用者以註冊的帳號成功登入,也就是帳號與密碼相符, login() 便呼叫 frienddata() 進行通訊錄資料的處理,這裡另有 prompt() 專門印出提示訊息,然後回傳使用者的選項。
函數定義放在實作檔中,我們也需要另一個含有 main() 的執行檔,請繼續參考
問題與討論
- 有哪些東西放在標頭檔裡頭?
- 又有哪些東西放在實作檔當中?
window.___gcfg = { 'lang': 'zh-TW' };
- Get link
- X
- Other Apps
1 則留言:
周小賢
提到...
您好,請問為什麼標頭檔內只放入函數的原型宣告,而不將函數本身也放進去呢?
2016年12月4日 下午5:37
張貼留言