Hvad er H-filformatet?
.h-filer oprettes, når der arbejdes med sprogene C, C++ eller Objective-C.
Indhold af .h-filer
Filer med filendelsen .h indeholder funktions-erklæringer eller makroer og kan indeholde data såsom:
- variabel- og konstanterklæringer,
- struct-, enum- og typedefinitioner,
#include-referencer til andre header-filer
I praksis bruges .h-filer til at opbevare delte erklæringer - kode, der refereres hyppigt til på tværs af flere .c og .cpp kildekodefiler. Dette giver bedre læsbarhed af kildekoden og øger programmørens effektivitet. Funktioner og makroer defineret i .h-filer gør dem genanvendelige på tværs af projekter og letter kodedeling. Dette gør det også lettere at opdatere koden, da grænsefladen er gemt på et enkelt, velkendt sted.
Hvordan bruges .h-filer?
Lagring af delte erklæringer i .h-filer gør dem lettere at tilgå og tilføje til projektets kildekode. Under kompilering udvider C-præprocessoren hvert #include-direktiv og kopierer headerens indhold ind i oversættelsesenheden, før compileren fortsætter. System-headere som <stdio.h> eller <vector> følger med compileren og behøver ikke at blive distribueret med dit projekt; projektspecifikke .h-filer er derimod en del af kildetræet og følger med det. Mange C++-projekter bruger også .hpp-filer til at skelne C++-headere fra rene C .h-headere, selvom begge afhænger af den samme #include-mekanisme.
Sikkerhed og tryghed
RISIKO: LOWEn .h-header er kildekode i almindelig tekst og kører ikke af sig selv, så det er sikkert at åbne eller læse en i en editor. Den reelle forsigtighed handler om KOMPILERING, ikke filformatet: header- (og kilde-) kode fra et upålideligt projekt kan indeholde ondsindet logik, der først kører, når du bygger og eksekverer programmet, så gennemse og byg kun ukendt C/C++ kode i en sandbox/VM og fra kilder, du stoler på. Der er ingen risiko ved blot at se teksten. (Headere kan også #include systemfiler og definere makroer, der ændrer, hvordan afhængig kode kompileres - relevant for udviklere, ikke en sikkerhedstrussel fra filen alene.)
Formatdetaljer
kort fortalt- Objective-C / Objective-C++ header - Apples Objective-C bruger også .h-headere (f.eks. til erklæring af @interface-klasser), der åbnes på samme måde i Xcode/teksteditorer.
- ch / diverse app-data - En håndfuld nicheprogrammer (og gamle spil-/dataværktøjer) genbruger .h til data, der ikke er kildekode; identificer ved filens indhold, ikke filendelsen.
Programmer der åbner H-filer
Tekniske detaljer
dyb specifikation| Filtype | Header-fil til kildekode i almindelig tekst |
| MIME-type | text/x-c |
| Filsignatur (magic bytes) | Ingen - almindelig tekst, identificeret ved filendelse og indhold |
| Typisk startkonstruktion | Include guard (`#ifndef NAME_H` / `#define NAME_H`) eller `#pragma once` for at forhindre gentagen inkludering |
| Præprocessorens rolle | Udvides inline af C-præprocessoren før kompilering; `.h`-filer kompileres ikke direkte |
| Inkluderingssyntaks | System-headere bruger vinkelparenteser (f.eks. `<stdio.h>`); projektheadere bruger dobbelte anførselstegn (f.eks. `"mylib.h"`) |
| Typisk indhold | Funktionserklæringer, makrodefinitioner, struct- og enumdefinitioner, typedef-aliasser og (i C++) klasseerklæringer |
| Relaterede filendelser | `.c`, `.cpp`, `.hpp`, `.hxx`, `.hh`, `.cc`, `.cxx` |
| C++-linkage | C-headere inkluderet i C++-kode er ofte pakket ind i `extern "C" { }` blokke for at forhindre name mangling |
| Tegnkodning | ASCII (historisk norm); UTF-8 er bredt accepteret af moderne compilere til identifikatorer og kommentarer |
| Beskyttelse mod gentagen inkludering | Include guards eller `#pragma once` sikrer, at den samme header kun behandles én gang pr. oversættelsesenhed |
| Standard C-biblioteksheadere | Følger `<navn.h>` konventionen, f.eks. `<stdio.h>`, `<stdlib.h>`, `<string.h>` |
| Skabelon-definitioner (C++) | Funktions- og klasseskabeloner skal være fuldt defineret i header-filer, da de instantieres ved kompileringstid |
| Udgivet | 1972 (C language; #include header convention from early C) |
| Åben standard | Ja · royaltyfri |
| Specifikation | en.cppreference.com |
H-konverteringer
Fællesskabets Q&A
spurgt af brugereIngen spørgsmål endnu - vær den første til at spørge om H-filer.