Hva er H-filformatet?
.h-filer opprettes når du arbeider med språkene C, C++ eller Objective-C.
Innholdet i .h-filer
Filer med filendelsen .h inneholder funksjons-deklarasjoner eller makroer, og kan inneholde data som:
- variabel- og konstantdeklarasjoner,
- struct-, enum- og typedefinisjoner,
#include-referanser til andre header-filer
I praksis brukes .h-filer til å holde på delte deklarasjoner - kode som refereres ofte på tvers av flere .c og .cpp kildekodefiler. Dette gir bedre lesbarhet i kildekoden og gjør programmereren mer effektiv. Funksjoner og makroer definert i .h-filer gjør dem gjenbrukbare på tvers av prosjekter og forenkler kodedeling. Dette gjør det også enklere å oppdatere koden, ettersom grensesnittet er lagret på ett enkelt, velkjent sted.
Hvordan brukes .h-filer?
Lagring av delte deklarasjoner i .h-filer gjør dem enklere å få tilgang til og legge til i prosjektets kildekode. Under kompilering utvider C-preprosessoren hvert #include-direktiv ved å kopiere headerens innhold inn i oversettelsesenheten før kompilatoren fortsetter. System-headere som <stdio.h> eller <vector> følger med kompilatoren og trenger ikke å distribueres med prosjektet ditt; prosjektspesifikke .h-filer er derimot en del av kildetreet og følger med dette. Mange C++-prosjekter bruker også .hpp-filer for å skille C++-spesifikke headere fra rene C-headere (.h), selv om begge baserer seg på den samme #include-mekanismen.
Sikkerhet og trygghet
RISIKO: LOWEn .h-header er kildekode i ren tekst og kjører ikke av seg selv, så det er trygt å åpne eller lese en i et tekstbehandlingsprogram. Den reelle advarselen gjelder KOMPILERING, ikke filformatet: header- (og kilde-) kode fra et upålitelig prosjekt kan inneholde skadelig logikk som først kjører når du bygger og utfører programmet. Derfor bør du kun gjennomgå og bygge ukjent C/C++-kode i en sandkasse/VM og fra kilder du stoler på. Det er ingen risiko forbundet med å bare se på teksten. (Headere kan også inkludere systemfiler og definere makroer som endrer hvordan avhengig kode kompileres - relevant for utviklere, men ikke en sikkerhetstrussel fra filen alene.)
Formatdetaljer
i et nøtteskall- Objective-C / Objective-C++ header - Apples Objective-C bruker også .h-headere (f.eks. for å deklarere @interface-klasser), som åpnes på samme måte i Xcode eller tekstbehandlingsprogrammer.
- ch / diverse app-data - Et lite antall nisjeprogrammer (og eldre spill/dataverktøy) gjenbruker .h for data som ikke er kildekode; identifiseres ved filens innhold, ikke filendelsen.
Programmer som åpner H-filer
Tekniske detaljer
dyp spesifikasjon| Filtype | Kildekode-header i ren tekst |
| MIME-type | text/x-c |
| Filsignatur (magic bytes) | Ingen - ren tekst, identifisert av filendelse og innhold |
| Typisk åpningskonstruksjon | Include guard (`#ifndef NAME_H` / `#define NAME_H`) eller `#pragma once` for å forhindre dobbel inkludering |
| Preprosessorens rolle | Utvides direkte i koden av C-preprosessoren før kompilering; `.h`-filer kompileres ikke direkte |
| Inkluderingssyntaks | System-headere bruker vinkelparenteser (f.eks. `<stdio.h>`); prosjektheadere bruker doble anførselstegn (f.eks. `"mylib.h"`) |
| Typisk innhold | Funksjonsdeklarasjoner, makrodefinisjoner, struct- og enum-definisjoner, typedef-aliaser og (i C++) klassedeklarasjoner |
| Relaterte filendelser | `.c`, `.cpp`, `.hpp`, `.hxx`, `.hh`, `.cc`, `.cxx` |
| C++-kobling | C-headere inkludert i C++-kode er ofte pakket inn i `extern "C" { }`-blokker for å forhindre «name mangling» |
| Tegnoding | ASCII (historisk norm); UTF-8 er vidt akseptert av moderne kompilatorer for identifikatorer og kommentarer |
| Beskyttelse mot dobbel inkludering | Include guards eller `#pragma once` sikrer at samme header kun behandles én gang per oversettelsesenhet |
| Standard C-bibliotekheadere | Følger konvensjonen `<navn.h>`, f.eks. `<stdio.h>`, `<stdlib.h>`, `<string.h>` |
| Mal-definisjoner (C++) | Funksjons- og klassemaler (templates) må være fullstendig definert i header-filer siden de instansieres ved kompileringstid |
| Utgitt | 1972 (C language; #include header convention from early C) |
| Åpen standard | Ja · royalty-fri |
| Spesifikasjon | en.cppreference.com |
H-konverteringer
Spørsmål og svar fra fellesskapet
spurt av brukereIngen spørsmål ennå - vær den første til å spørre om H-filer.