Ano ang isang H file?
Ang file na na-save na may h file extension ay isang header file na ginagamit sa mga C/C++ na file upang isama ang deklarasyon ng mga variable, constant, at function. Ang mga ito ay tinutukoy ng C++ na mga file ng pagpapatupad na naglalaman ng aktwal na pagpapatupad ng mga function na ito. Ang isang .h header file ay maaari ding magsama ng karagdagang impormasyon gaya ng mga kahulugan ng Macro. Ang mga header file na ito ay isinangguni sa mga C/C++ na file gamit ang direktiba na #include
.
Ang isang bagong proyekto sa C++ ay karaniwang naglalaman ng isang espesyal na file ng header na may pangalang stdafx.h file na siyang panimulang punto para sa lahat ng mga compilation chain at lahat ng mga header file ay maaaring isama sa isang file na ito. Maaaring mabuksan ang isang .h file gamit ang anumang text editor, Eclipse IDE, Microsoft Visual Studio IDE, Borland C++ compiler at marami pang ibang application.
.H File Format
Ang .h file ay plain text file na may sariling mga panuntunan para sa pagtukoy ng syntax. Ang mga header file ay maaaring maglaman ng sumusunod na impormasyon.
Mga Variable
- Sa kaso ng Object Oriented Programming (OOP), ang isang class header file ay naglalaman ng mga kahulugan ng lahat ng mga variable sa antas ng klase na naa-access sa mga file ng source code ng pagpapatupad.
Deklarasyon ng Mga Paraan
- Ang lahat ng mga deklarasyon ng pamamaraan ay kasama sa mga .h header file upang ma-access sa maraming mga file ng pagpapatupad.
Non-Inline Function Definition
- Ang mga header file ay maaari ding maglaman ng mga kahulugan ng isang non-inline na pamamaraan.
Mga Mapa ng Mensahe
- Ang isang header file ay maaari ding maglaman ng mga mapa ng mensahe sa kaso ng pagpapatupad ng source code ng MFC. Sa ganoong sitwasyon, ang mga mapa ng mensahe ay naka-link sa pagpapatupad ng functionality na naka-link sa mga elemento ng UI gaya ng button, checkbox, radio button, atbp.
Header Guards
Maaaring tumaas ang mga file ng header sa mga kumplikadong error kung saan ang maraming deklarasyon ay kasama sa parehong file bilang resulta ng pagdaragdag ng iba pang mga file ng header. Ang mga duplicate na kahulugan na ito ay nagpapataas ng mga error sa compiler. Maiiwasan ang problemang sitwasyong ito sa pamamagitan ng mekanismong tinatawag na header guard na mga conditional compilation directive tulad ng ipinapakita sa ibaba.
#ifndef ANY_UNIQUE_NAME_HERE
#define ANY_UNIQUE_NAME_HERE
// your declarations (and certain types of definitions) here
#endif
Gamit ang header na ito, sinusuri ng preprocessor kung natukoy na ang ANY_UNIQUE_NAME_HERE
. Kung ang header ay paulit-ulit na kasama sa parehong file, ang mga nilalaman ng header ay hindi papansinin.
H File Halimbawa
// sample.h
#pragma once
#include <vector> // #include directive
#include <string>
namespace N // namespace declaration
{
inline namespace P
{
//...
}
enum class colors : short { red, blue, purple, azure };
const double PI = 3.14; // const and constexpr definitions
constexpr int MeaningOfLife{ 42 };
constexpr int get_meaning()
{
static_assert(MeaningOfLife == 42, "unexpected!"); // static_assert
return MeaningOfLife;
}
using vstr = std::vector<int>; // type alias
extern double d; // extern variable
#define LOG // macro definition
#ifdef LOG // conditional compilation directive
void print_to_log();
#endif
class my_class // regular class definition,
{ // but no non-inline function definitions
friend class other_class;
public:
void do_something(); // definition in my_class.cpp
inline void put_value(int i) { vals.push_back(i); } // inline OK
private:
vstr vals;
int i;
};
struct RGB
{
short r{ 0 }; // member initialization
short g{ 0 };
short b{ 0 };
};
template <typename T> // template definition
class value_store
{
public:
value_store<T>() = default;
void write_value(T val)
{
//... function definition OK in template
}
private:
std::vector<T> vals;
};
template <typename T> // template declaration
class value_widget;
}