Hlavičkový souborHlavičkový soubor (anglicky header file) je v informatice speciální soubor, který se používá v některých programovacích jazycích (např. C a C++). Umožňuje vyčlenit některé části zdrojového kódu programu do zvláštních souborů, které lze opakovaně používat. Standardní knihovna jazyka C a standardní knihovna jazyka C++ tradičně deklarují své funkce v hlavičkových souborech. Novější kompilované jazyky (jako Java nebo C#) nepoužívají dopředné deklarace. Místo toho jsou identifikátory automaticky rozpoznány ze zdrojových kódů a čteny přímo ze symbolů dynamických knihoven, což znamená, že hlavičkové soubory nejsou potřeba. CharakteristikaHlavičkové soubory běžně obsahují dopředné deklarace tříd, funkcí, proměnných a jiných identifikátorů. Programátor, který potřebuje deklarovat typový identifikátor ve více než jednom zdrojovém souboru, může identifikátor umístit do hlavičkového souboru. Na soubor je pak možné se odkazovat ze zdrojových souborů pomocí direktivy preprocesoru ( MotivaceNejmodernější programovací jazyky umožňují rozdělit programy do menších částí (jako jsou třídy a metody) a ty rozdělit do více překladových úloh (typicky ve formě zdrojových souborů), které lze poté kompilovat odděleně. Jakmile je potřeba použít metodu na jiném místě, než kde je definována, musí existovat způsob, jak se na ni odkázat. Například funkce definovaná tímto způsobem v jednom zdrojovém souboru: int secti(int a, int b)
{
return a + b;
}
může být deklarována (jako prototyp funkce) a následně použita v druhém zdrojovém souboru následovně: int secti(int, int);
int obvodCtverce(int x)
{
return secti(secti(x, x), secti(x, x));
}
Nevýhodou tohoto postupu je, že prototyp funkce musí být přítomen ve všech souborech, které funkci používají. Další nevýhodu představuje fakt, že pokud dojde ke změně typu návratové hodnoty nebo argumentů dané funkce, musí být všechny prototypy funkce také upraveny. Použití hlavičkového souboruTento postup lze automatizovat použitím preprocesoru jazyka C, takže při použití prototypu je vždy použit ten nejnovější. Například v následujícím kódu je ve zvláštním souboru deklarována funkce (kompilátor nevyužívá názvy parametrů, ty jsou ale užitečné pro programátora): #ifndef ADD_H_GUARD
#define ADD_H_GUARD
int secti(int a, int b);
#endif
Tento soubor používá tzv. include guard, aby se zabránilo vícenásobné definici stejné funkce. Následující kód ukazuje, jak se hlavičkové soubory používají: #include "add.h"
int obvodCtverce(int x)
{
return secti(secti(x, x), secti(x, x));
}
Vždy když je tento kód zkompilován, dojde k vložení aktuálních prototypů funkcí, které jsou deklarovány v add.h. Tím se zabrání vzniku potenciálních kritických chyb. Umístění hlavičkových souborůAby nebylo nutné ve zdrojovém kódu vždy uvádět celou cestu k hlavičkovému souboru, lze překladači sdělit, že se nacházejí na standardním umístění. V tom případě je nutné uzavřít jméno souboru do znaků menší #include <stdio.h>
#include <acl/libacl.h>
Pokud chceme použít vlastní hlavičkové soubory, uzavírá se jméno souboru do uvozovek a relativní cesta se vztahuje k aktuálním adresáři: #include "version.h"
Unixové systémyHlavičkové soubory jsou v unixových systémech umístěny podle standardu FHS v adresáři V Linuxu a některých dalších systémech mohou být hlavičkové soubory i v WindowsHlavičkové soubory jsou umístěny v adresáři, kde je nainstalováno Microsoft Windows SDK. Případně mohou být součástí instalace vývojového prostředí (například Microsoft Visual Studio). Předkompilované hlavičkyPředkompilované hlavičky (anglicky precompiled headers) jsou technika, kterou používají některé překladače jazyků C a C++, aby snížily čas potřebný ke kompilaci, jelikož hlavičkové soubory mohou obsahovat velké množství zdrojového kódu (například hlavičkový soubor Podobnou funkci zastávají prefixové hlavičky, které jsou většinou také předkompilovány a jsou připojeny ke všem zdrojovým souborům bez nutnosti explicitní deklarace. Jednoduchý příkladMáme hlavičkový soubor header.hpp psaný v jazyce C++: // header.hpp
...
A ten je inkludován souborem source.cpp: // source.cpp
#include "header.hpp"
...
Při prvním překladu souboru source.cpp jsou vytvořeny a uloženy do souboru AlternativyNěkteré novější programovací jazyky (jako Java) používají místo hlavičkových souborů systém jmenných schémat, které překladači dovolují najít zdrojové soubory asociované s implementací rozhraní a tříd. V tomto případě je ovšem omezena svoboda při pojmenovávání souborů. Tyto jazyky uchovávají informace o funkcích v object kódu a dovolují tak linkeru ověřit, že jsou funkce použity korektně. COBOL a RPG IV používají způsob inkludování souborů nazývaný copybook. Copybook je vložen do zdrojového souboru podobným způsobem jako hlavičkový soubor a navíc umožňuje nahrazení určitého textu uvnitř něho jiným textem. COBOL používá pro připojení klíčové slovo ReferenceV tomto článku byl použit překlad textu z článku Header file na anglické Wikipedii. Související článkyExterní odkazy |