Plik nagłówkowy
Pliki nagłówkowe – przy kompilatorze języka C i pochodnych (C++ itp.) pliki źródłowe o rozszerzeniu „h” (w C++ powinno się dla odróżnienia stosować „hpp”, ale w praktyce najczęściej spotykane jest nadal rozszerzenie „h”) zawierające opis interfejsu modułu: deklaracje zmiennych, funkcji, klas i innych struktur danych. Używa się ich ze względu na to, by nie było potrzeby, przy każdej nawet najmniejszej zmianie w implementacji jednego modułu, rekompilowania wszystkich innych odwołujących się do niego. W nowszych językach, takich jak Java czy C#, nie ma już potrzeby stosowania plików nagłówkowych.
Po wydaniu preprocesorowi poleceń dołączenia plików nagłówkowych np.:
#include "NazwaPliku.hpp" #include <cstdio>
przed rozpoczęciem kompilacji tekst tych plików jest wstawiany do tekstu programu w miejsce instrukcji #include
. Pierwsza jej postać służy do dołączenia pliku nagłówkowego znajdującego się w tym samym katalogu co program. Nazwa modułu umieszczona w ostrych nawiasach oznacza, że znajduje się on w katalogu ze standardowymi plikami nagłówkowymi (dostarczonymi wraz z kompilatorem).
Pliki nagłówkowe powinny zawierać
- definicje typów (klas)
- deklaracje globalnych i statycznych zmiennych
- definicje stałych
- deklaracje funkcji (metod)
- definicje funkcji inline.
Definicje funkcji (metod) powinno umieszczać się w pliku o tej samej nazwie, co plik nagłówkowy, lecz z rozszerzeniem „c” lub „cpp”.
Przykład użycia
Plik rnm.hpp
zawiera:
#ifndef _RNM_HPP #define _RNM_HPP float Suma(float,float); float Roznica(float,float); #endif
Plik rnm.cpp
:
float Suma(float x,float y) { return (x+y); } float Roznica(float x,float y) { return (x-y); }
Plik główny programu:
#include "rnm.hpp" #include <iostream> using namespace std; int main() { float a,b; cin>>a; cin>>b; cout<<a<<" + "<<b<<" = "<<Suma(a,b)<<endl; cout<<a<<" - "<<b<<" = "<<Roznica(a,b)<<endl; return 0; }
Poniższe dyrektywy zapobiegają próbie dołączenie tego samego pliku więcej niż jeden raz:
#ifndef _RNM_HPP #define _RNM_HPP ... #endif
preprocesor sprawdza, czy została już zdefiniowania etykieta _RNM_HPP
, jeżeli nie, to zostaje ona zainicjowana i treść całego modułu jest dołączana do programu – przy następnej próbie dołączenia tego pliku preprocesor będzie znał etykietę _RNM_HPP
, więc ominie (nie dołączy) instrukcje pomiędzy #ifndef _RNM_HPP
a #endif
.
W przypadku niektórych kompilatorów C++ (np. Microsoft Visual C++) instrukcja #pragma once
może być użyta do zapobiegania wielokrotnego dołączania pliku – nie wchodzi ona jednak w skład ISO C++ i jest odradzana.
Niektóre pliki nagłówkowe, głównie dotyczące modułów standardowych, są bezpośrednio dostarczone z kompilatorem i umożliwiają łatwe posługiwanie się podstawowymi funkcjami takimi jak obsługa urządzeń wejścia/wyjścia czy bardziej zaawansowane funkcje matematycznne.
Pliki nagłówkowe z C używane w programach C++
Zgodnie z ISO C++, standardowe pliki nagłówkowe o rozszerzeniu „h”, w programach napisanych w C++, mogą być dołączane na dwa możliwe sposoby:
#include <cNAZWAPLIKU> #include "cNAZWAPLIKU"
gdzie NAZWAPLIKU
jest nazwą bez rozszerzenia – przykładowo, podczas gdy w C używa się #include <stdio.h>
, w C++ należy użyć zapisu #include <cstdio>
.
![]() | Zobacz podręcznik w Wikibooks: C – Biblioteki |