อัปเดตล่าสุด: 26 Feb, 2026

เมื่อเขียนโปรแกรม C++ โดยเฉพาะในโครงการขนาดใหญ่ การจัดระเบียบโค้ดของคุณเป็นหลายไฟล์เป็นสิ่งสำคัญเพื่อความอ่านง่ายและการบำรุงรักษา โดยทั่วไปจะใช้ ไฟล์หัวเรื่อง (header files) ซึ่งมีนามสกุล .h หรือ .hpp แต่ความแตกต่างระหว่างสองแบบนี้คืออะไร และควรใช้แบบไหน?
ในบทความนี้ เราจะอธิบายความแตกต่างระหว่างไฟล์ .h และ .hpp สำรวจประวัติของพวกมัน และให้คำแนะนำเกี่ยวกับแนวปฏิบัติที่ดีที่สุด
ทำความเข้าใจไฟล์หัวเรื่องใน C++
ไฟล์หัวเรื่องประกอบด้วย การประกาศ สำหรับฟังก์ชัน, คลาส, ค่าคงที่, และมาโครที่คุณสามารถนำไปใช้ในหลายไฟล์ซอร์ส ไฟล์เหล่านี้จะถูกนำเข้าในไฟล์ .cpp (ซอร์ส C++) ด้วยคำสั่ง #include
เนื้อหาทั่วไปของไฟล์หัวเรื่อง
- การกำหนดคลาส
- การประกาศฟังก์ชัน
- การกำหนดค่าคงที่
- มาโคร
- เทมเพลต (ในบางกรณี)
ไฟล์ .h
ไฟล์ .h คืออะไร?
ไฟล์ .h เป็น ไฟล์หัวเรื่อง แบบดั้งเดิมและเคยใช้กันอย่างแพร่หลายแรกในภาษาโปรแกรม C ยังใช้ในโครงการ C และ C++ เพื่อประกาศอินเทอร์เฟซ
ตัวอย่างการใช้งาน:
// mathutils.h
#ifndef MATHUTILS_H
#define MATHUTILS_H
int add(int a, int b);
int subtract(int a, int b);
#endif
จุดเด่น:
- ได้รับการยอมรับทั่วโลก (ใช้ได้ทั้งใน C และ C++)
- เหมาะสำหรับโครงการที่มีโค้ด C และ C++ ร่วมกัน
จุดด้อย:
- อาจทำให้เกิดความสับสนในโครงการ C++ ว่าไฟล์นี้เป็นสไตล์ C หรือ C++
ไฟล์ .hpp
ไฟล์ .hpp คืออะไร?
ไฟล์ .hpp เป็นไฟล์หัวเรื่องที่เฉพาะสำหรับ C++ ทำงานเช่นเดียวกับไฟล์ .h แต่ใช้เพื่อ บ่งบอกอย่างชัดเจน ว่าไฟล์หัวเรื่องนี้ตั้งใจสำหรับโค้ด C++
ตัวอย่างการใช้งาน:
// vectorutils.hpp
#ifndef VECTORUTILS_HPP
#define VECTORUTILS_HPP
#include <vector>
std::vector<int> filter_even(const std::vector<int>& input);
#endif
จุดเด่น:
- บ่งบอกอย่างชัดเจนว่าไฟล์นี้ตั้งใจสำหรับโค้ด C++
- หลีกเลี่ยงความสับสนเมื่อผสม C และ C++
- เป็นประโยชน์ในโครงการหลายภาษา หรือทีมที่ปฏิบัติตามกฎการตั้งชื่ออย่างเคร่งครัด
จุดด้อย:
- ค่อนข้างไม่พบบ่อยในฐานโค้ดเก่า
- ไม่ได้รับการรับรู้จากระบบเก่าบางระบบที่คาดหวัง
.h
.h vs .hpp: ความแตกต่างสำคัญ
| คุณลักษณะ | ไฟล์ .h | ไฟล์ .hpp |
|---|---|---|
| ความสัมพันธ์กับภาษา | C และ C++ | เฉพาะ C++ |
| เป็นแนวปฏิบัติหรือกฎ? | แนวปฏิบัติ | แนวปฏิบัติ |
| การใช้ในโครงการ C++ | ทั่วไป | ที่บางคนเลือกเพื่อความชัดเจน |
| การสนับสนุนเทมเพลต | ใช่ | ใช่ |
| ความสับสนของโค้ด | อาจเกิดในโครงการหลายภาษา | น้อยลง |
แนวปฏิบัติที่ดีที่สุดในการเลือกใช้ระหว่าง .h และ .hpp
ต่อไปนี้คือแนวทางทั่วไปเพื่อช่วยคุณเลือก:
ใช้ .h หาก:
- คุณกำลังเขียนโค้ดที่ต้องเข้ากันได้กับทั้ง C และ C++
- คุณกำลังดูแลหรือขยายโค้ดเก่าที่ใช้
.hอยู่แล้ว
ใช้ .hpp หาก:
- คุณต้องการให้ชัดเจนว่าไฟล์นี้เป็นเฉพาะ C++
- คุณทำงานในโครงการที่ใช้ C++ เท่านั้นหรือใช้คุณลักษณะเฉพาะของ C++ เช่น คลาส, เทมเพลต, และเนมสเปซ
โครงสร้างโครงการทั่วไป
ตัวอย่างที่ใช้ .h:
project/
├── main.cpp
├── mathutils.h
└── mathutils.cpp
ตัวอย่างที่ใช้ .hpp:
project/
├── main.cpp
├── vectorutils.hpp
└── vectorutils.cpp
โครงสร้างทั้งสองเป็นที่ยอมรับ; ความแตกต่างอยู่ที่ความชัดเจนและความชอบของทีม
สรุป
การเลือกใช้ระหว่าง .h และ .hpp ส่วนใหญ่เป็นเรื่องของ แนวปฏิบัติ ไม่ใช่ฟังก์ชัน ทั้งสองทำหน้าที่เดียวกันคือประกาศอินเทอร์เฟซและโค้ดที่ใช้ร่วมกันในหลายไฟล์ซอร์ส C++
อย่างไรก็ตาม สำหรับโค้ดที่เฉพาะเจาะจงกับ C++ การใช้ .hpp สามารถทำให้เจตนาของคุณชัดเจนขึ้นและช่วยหลีกเลี่ยงความสับสนในฐานโค้ดขนาดใหญ่—โดยเฉพาะอย่างยิ่งในโครงการที่เกี่ยวข้องกับหลายภาษา สำหรับโครงการหลายภาษา หรือโครงการเก่า .h อาจยังคงเป็นตัวเลือกที่เหมาะสม
ประเด็นสำคัญ:
ใช้
.hppเมื่อคุณต้องการสื่อว่า “นี่คือโค้ด C++ เท่านั้น” — ใช้.hหากคุณทำงานในสภาพแวดล้อมที่ผสม C และ C++