Τελευταία ενημέρωση: 26 Feb, 2026

Τίτλος - .h vs .hpp: Ποια είναι η Διαφορά και Ποιο Πρέπει να Χρησιμοποιήσετε;

Όταν γράφετε προγράμματα C++, ειδικά σε μεγάλα έργα, η οργάνωση του κώδικα σε πολλαπλά αρχεία είναι απαραίτητη για την αναγνωσιμότητα και τη συντήρηση. Αυτό συνήθως περιλαμβάνει τη χρήση αρχείων κεφαλίδας, που έχουν τις επεκτάσεις .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++.

Δείτε επίσης