Header Files ไฟล์ส่วนหัว ภาษา C

ไฟล์ส่วนหัวเป็นไฟล์ที่มีนามสกุล .h ซึ่งมีการประกาศฟังก์ชัน C และคำจำกัดความของมาโครที่จะแชร์ระหว่างไฟล์ต้นทางหลายไฟล์ ไฟล์ส่วนหัวมีสองประเภท: ไฟล์ที่โปรแกรมเมอร์เขียนและไฟล์ที่มาพร้อมกับคอมไพเลอร์ของคุณ

คุณขอใช้ไฟล์ส่วนหัวในโปรแกรมของคุณโดยรวมเข้ากับคำสั่ง พรีโปรเซสเซอร์ #include เช่นเดียวกับที่คุณเคยเห็นการรวมไฟล์ส่วนหัว stdio.h ซึ่งมาพร้อมกับคอมไพเลอร์ของคุณ

การรวมไฟล์ส่วนหัวเท่ากับการคัดลอกเนื้อหาของไฟล์ส่วนหัว แต่เราไม่ทำเพราะจะเกิดข้อผิดพลาดได้ง่ายและไม่ควรคัดลอกเนื้อหาของไฟล์ส่วนหัวในไฟล์ต้นฉบับโดยเฉพาะถ้าเรา มีไฟล์ต้นฉบับหลายไฟล์ในโปรแกรม

แนวทางปฏิบัติง่ายๆ ในโปรแกรม C หรือ C++ คือเราเก็บค่าคงที่ มาโคร ตัวแปรส่วนกลางทั้งระบบ และต้นแบบฟังก์ชันในไฟล์ส่วนหัวและรวมไฟล์ส่วนหัวนั้นไว้ทุกที่ที่ต้องการ

Include Syntax


ทั้งผู้ใช้และส่วนหัวของไฟล์ระบบที่จะถูกรวมโดยใช้คำสั่ง พรีโปรเซสเซอร์  C  #include มีสองรูปแบบดังต่อไปนี้ −

#include <file>


รูปแบบนี้ใช้สำหรับไฟล์ส่วนหัวของระบบ มันค้นหาไฟล์ชื่อ ‘file’ ในรายการไดเร็กทอรีระบบมาตรฐาน 

#include "file"


รูปแบบนี้ใช้สำหรับไฟล์ส่วนหัวของโปรแกรมของคุณเอง มันค้นหาไฟล์ชื่อ ‘file’ ในไดเร็กทอรีที่มีไฟล์ปัจจุบัน

Include Operation

#include งานสั่งโดยการกำกับ พรีโปรเซสเซอร์ C ในการสแกนไฟล์ที่ระบุเป็นข้อมูลก่อนดำเนินการต่อกับส่วนที่เหลือของแฟ้มแหล่งที่มาในปัจจุบัน เอาต์พุตจากตัวประมวลผลล่วงหน้ามีเอาต์พุตที่สร้างไว้แล้ว ตามด้วยเอาต์พุตที่เป็นผลจากไฟล์ที่รวม ตามด้วยเอาต์พุตที่มาจากข้อความหลังคำสั่ง #include ตัวอย่างเช่น หากคุณมีไฟล์ส่วนหัว header.h ดังนี้ −

char *test (void);


และโปรแกรมหลักชื่อ program.c ซึ่งใช้ไฟล์ส่วนหัวแบบนี้ 

int x;
#include "header.h"

int main (void) {
   puts (test ());
}


คอมไพเลอร์จะเห็นสตรีมโทเค็นเหมือนกันกับที่ program.c อ่าน

int x;
char *test (void);

int main (void) {
   puts (test ());
}


Once-Only Headers


หากมีการรวมไฟล์ส่วนหัวสองครั้ง คอมไพเลอร์จะประมวลผลเนื้อหาสองครั้ง และจะส่งผลให้เกิดข้อผิดพลาด วิธีมาตรฐานในการป้องกันสิ่งนี้คือการใส่เนื้อหาจริงทั้งหมดของไฟล์แบบมีเงื่อนไขดังนี้:

#ifndef HEADER_FILE
#define HEADER_FILE

the entire header file file

#endif


โครงสร้างนี้เป็นที่รู้จักกันทั่วไปว่าเป็นเสื้อคลุมคำสั่ง #ifdefเมื่อรวมส่วนหัวอีกครั้ง เงื่อนไขจะเป็นเท็จ เนื่องจากมีการกำหนด HEADER_FILE ตัวประมวลผลล่วงหน้าจะข้ามเนื้อหาทั้งหมดของไฟล์ และคอมไพเลอร์จะไม่เห็นมันอีกสองครั้ง

Computed Includes


บางครั้งจำเป็นต้องเลือกไฟล์ส่วนหัวที่แตกต่างกันหลายไฟล์เพื่อรวมไว้ในโปรแกรมของคุณ ตัวอย่างเช่น อาจระบุพารามิเตอร์การกำหนดค่าเพื่อใช้กับระบบปฏิบัติการประเภทต่างๆ คุณสามารถทำได้ด้วยชุดเงื่อนไขดังต่อไปนี้ −

#if SYSTEM_1
   # include "system_1.h"
#elif SYSTEM_2
   # include "system_2.h"
#elif SYSTEM_3
   ...
#endif


แต่เมื่อเติบโตขึ้น ก็กลายเป็นเรื่องน่าเบื่อ แทนตัวประมวลผลล่วงหน้าให้ความสามารถในการใช้มาโครสำหรับชื่อส่วนหัว นี้เรียกว่าcomputed include ได้แก่ แทนที่จะเขียนชื่อส่วนหัวเป็นอาร์กิวเมนต์โดยตรงของ #include คุณเพียงแค่ใส่ชื่อมาโครที่นั่น −

#define SYSTEM_H "system_1.h"
...
#include SYSTEM_H

SYSTEM_H จะถูกขยาย และตัวประมวลผลล่วงหน้าจะค้นหา system_1.h ราวกับว่า #include ถูกเขียนแบบนั้นในตอนแรก SYSTEM_H สามารถกำหนดโดย Makefile ของคุณด้วยตัวเลือก -D

Leave a Reply

Your email address will not be published. Required fields are marked *