Wat is het H-bestandsformaat?
.h-bestanden worden gemaakt bij het werken met de talen C, C++ of Objective-C.
Inhoud van .h-bestanden
Bestanden met de extensie .h bevatten functie-declaraties of macro's, en kunnen gegevens bevatten zoals:
- declaraties van variabelen en constanten,
- struct-, enum- en typedefinities,
#include-verwijzingen naar andere header-bestanden
In de praktijk worden .h-bestanden gebruikt om gedeelde declaraties te bevatten - code waarnaar vaak wordt verwezen in meerdere .c en .cpp bronbestanden. Dit zorgt voor een betere leesbaarheid van de broncode en efficiëntie voor de programmeur. Functies en macro's die in .h-bestanden zijn gedefinieerd, maken ze herbruikbaar over projecten heen en vergemakkelijken het delen van code. Dit maakt het ook eenvoudiger om de code bij te werken, aangezien de interface op één bekende plaats is opgeslagen.
Hoe worden .h-bestanden gebruikt?
Het opslaan van gedeelde declaraties in .h-bestanden maakt ze gemakkelijker toegankelijk en toe te voegen aan de broncode van het project. Tijdens de compilatie breidt de C-preprocessor elke #include-richtlijn uit, waarbij de inhoud van de header in de vertaaleenheid wordt gekopieerd voordat de compiler verdergaat. Systeemheaders zoals <stdio.h> of <vector> worden meegeleverd met de compiler en hoeven niet met uw project te worden gedistribueerd; projectspecifieke .h-bestanden maken echter deel uit van de bronstructuur en reizen ermee mee. Veel C++-projecten gebruiken ook .hpp-bestanden om C++-only headers te onderscheiden van gewone C .h-headers, hoewel beide op hetzelfde #include-mechanisme vertrouwen.
Beveiliging & veiligheid
RISICO: LOWEen .h-header is broncode in platte tekst en voert zichzelf niet uit, dus het openen of lezen ervan in een editor is veilig. De waarschuwing in de praktijk gaat over COMPILEREN, niet over het bestandsformaat: header- (en bron-) code van een niet-vertrouwd project kan kwaadaardige logica bevatten die pas wordt uitgevoerd zodra u het programma bouwt en uitvoert. Bekijk en bouw onbekende C/C++ code daarom alleen in een sandbox/VM en van bronnen die u vertrouwt. Er is geen risico bij het simpelweg bekijken van de tekst. (Headers kunnen ook systeembestanden #include-n en macro's definiëren die veranderen hoe afhankelijke code compileert - relevant voor ontwikkelaars, geen beveiligingsdreiging van het bestand alleen.)
Formaatdetails
in een notendop- Objective-C / Objective-C++ header - Apple's Objective-C gebruikt ook .h-headers (bijv. voor het declareren van @interface-klassen), die op dezelfde manier worden geopend in Xcode/tekst-editors.
- ch / diverse app-gegevens - Een handvol nicheprogramma's (en oude game/data-tools) hergebruiken .h voor niet-broncode gegevens; identificeer deze aan de hand van de inhoud van het bestand, niet de extensie.
Programma's die H-bestanden openen
Technische details
diepe specificaties| Bestandstype | Broncode-header in platte tekst |
| MIME-type | text/x-c |
| Bestandssignatuur (magic bytes) | Geen - platte tekst, geïdentificeerd door extensie en inhoud |
| Typische openingsconstructie | Include guard (`#ifndef NAME_H` / `#define NAME_H`) of `#pragma once` om meervoudige insluiting te voorkomen |
| Rol van de preprocessor | Inline uitgebreid door de C-preprocessor vóór compilatie; `.h`-bestanden worden niet direct gecompileerd |
| Include-syntaxis | Systeemheaders gebruiken punthaken (bijv. `<stdio.h>`); projectheaders gebruiken dubbele aanhalingstekens (bijv. `"mylib.h"`) |
| Typische inhoud | Functiedeclaraties, macrodefinities, struct- en enumdefinities, typedef-aliassen en (in C++) class-declaraties |
| Gerelateerde extensies | `.c`, `.cpp`, `.hpp`, `.hxx`, `.hh`, `.cc`, `.cxx` |
| C++-koppeling | C-headers die in C++-code zijn opgenomen, worden vaak verpakt in `extern "C" { }` blokken om name mangling te voorkomen |
| Tekstcodering | ASCII (historische norm); UTF-8 wordt breed geaccepteerd door moderne compilers voor identifiers en commentaren |
| Bescherming tegen meervoudige insluiting | Include guards of `#pragma once` zorgen ervoor dat dezelfde header slechts één keer per vertaaleenheid wordt verwerkt |
| Standaard C-bibliotheekheaders | Volgen de `<naam.h>` conventie, bijv. `<stdio.h>`, `<stdlib.h>`, `<string.h>` |
| Template-definities (C++) | Functie- en class-templates moeten volledig in header-bestanden worden gedefinieerd, omdat ze tijdens de compilatie worden geïnstantieerd |
| Uitgebracht | 1972 (C language; #include header convention from early C) |
| Open standaard | Ja · royaltyvrij |
| Specificatie | en.cppreference.com |
H conversies
Community V&A
gevraagd door gebruikersNog geen vragen - wees de eerste om iets te vragen over H-bestanden.