aspose.info
DA

H - C/C++ Header-filformat

Opdateret

Hvad er en H-fil?

En fil gemt med h filtypenavn er en header-fil, der bruges i C/C++-filer til at inkludere erklæringen af variabler, konstanter og funktioner. Disse henvises til af C++ implementeringsfilerne, der indeholder den faktiske implementering af disse funktioner. En .h-headerfil kan også indeholde yderligere oplysninger såsom makrodefinitioner. Der henvises til disse header-filer i C/C++-filerne ved hjælp af #include-direktivet.

Et nyt C++-projekt indeholder normalt en speciel header-fil med navnet stdafx.h-fil, som er udgangspunktet for alle kompileringskæder, og alle header-filerne kan inkluderes i denne enkelte fil. En .h-fil kan åbnes med enhver teksteditor, Eclipse IDE, Microsoft Visual Studio IDE, Borland C++ compiler og en masse andre programmer.

.H Filformat

En .h-fil er en almindelig tekstfil, der har sine egne regler for at definere syntaksen. Header-filer kan indeholde følgende oplysninger.

Variables - I tilfælde af objektorienteret programmering (OOP) indeholder en klasseheader-fil definitioner af alle klasseniveauvariabler, der er tilgængelige på tværs af implementeringskildekodefilerne Methods Declaration - Alle metodedeklarationerne er inkluderet i .h header-filerne for at være tilgængelige på tværs af flere implementeringsfiler. Non-inline funktionsdefinitioner - Header-filer kan også indeholde definitioner af en ikke-inline-metode. Message Maps - En header-fil kan også indeholde meddelelseskort i tilfælde af en MFC-kildekodeimplementering. I sådanne tilfælde er meddelelseskortene knyttet til funktionalitetsimplementeringen, som er knyttet til UI-elementer såsom knap, afkrydsningsfelt, radioknapper osv.

Hovedbeskyttere

Header-filer kan føre til komplekse fejl, hvor flere erklæringer er inkluderet i den samme fil som et resultat af tilføjelse af andre header-filer. Disse dublerede definitioner rejser compilerfejl. Denne problematiske situation kan undgås via en mekanisme kaldet header guard, som er betingede kompileringsdirektiver som vist nedenfor.

#ifndef ANY_UNIQUE_NAME_HERE
#define ANY_UNIQUE_NAME_HERE

// your declarations (and certain types of definitions) here

#endif

Med denne header kontrollerer præprocessoren, om ANY_UNIQUE_NAME_HERE allerede er defineret. Hvis headeren gentagne gange inkluderes i den samme fil, vil indholdet af headeren blive ignoreret.

H Fil Eksempel

// 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;
}

Referencer

Se også