File Format Docs
NO

H - C/C++ Header-filformat

Oppdatert

Hva er en H-fil?

En fil lagret med h-filtypen er en overskriftsfil som brukes i C/C++-filer for å inkludere deklarasjonen av variabler, konstanter og funksjoner. Disse henvises til av implementeringsfilene C++ som inneholder den faktiske implementeringen av disse funksjonene. En .h-headerfil kan også inneholde tilleggsinformasjon som makrodefinisjoner. Disse overskriftsfilene refereres til i C/C++-filene ved å bruke “#include”-direktivet.

Et nytt C++-prosjekt inneholder vanligvis en spesiell header-fil med navnet stdafx.h-fil som er utgangspunktet for alle kompileringskjeder og alle header-filene kan inkluderes i denne enkeltfilen. En .h-fil kan åpnes med hvilken som helst tekstredigerer, Eclipse IDE, Microsoft Visual Studio IDE, Borland C++ kompilator og mange andre applikasjoner.

.H Filformat

En .h-fil er en ren tekstfil som har sine egne regler for å definere syntaksen. Overskriftsfiler kan inneholde følgende informasjon.

Variables - I tilfelle av objektorientert programmering (OOP), inneholder en klasseoverskriftsfil definisjoner av alle klassenivåvariabler som er tilgjengelige på tvers av implementeringskildekodefilene Methods Declaration - Alle metodeerklæringene er inkludert i .h-headerfilene for å være tilgjengelige på tvers av flere implementeringsfiler. Non-Inline Function Definitions - Overskriftsfiler kan også inneholde definisjoner av ikke-innebygde metoder. Message Maps - En overskriftsfil kan også inneholde meldingskart i tilfelle en MFC-kildekodeimplementering. I slike tilfeller er meldingskartene knyttet til funksjonalitetsimplementeringen som er knyttet til UI-elementer som knapp, avkrysningsboks, radioknapper, etc.

Header Guards

Header-filer kan føre til komplekse feil der flere erklæringer er inkludert i samme fil som et resultat av å legge til andre header-filer. Disse dupliserte definisjonene gir kompilatorfeil. Denne problematiske situasjonen kan unngås via en mekanisme kalt 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 overskriften sjekker forprosessoren om ANY_UNIQUE_NAME_HERE allerede er definert. Hvis overskriften gjentatte ganger inkluderes i den samme filen, vil innholdet i overskriften bli ignorert.

H File Example

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

Referanser

Se også