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

หัวข้อ - .h vs .hpp: ความแตกต่างคืออะไรและควรใช้แบบไหน?

เมื่อเขียนโปรแกรม 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++

ดูเพิ่มเติม