Plik nagłówkowy

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj

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 po to, by nie trzeba było przy każdej najmniejszej zmianie w implementacji jednego modułu rekompilować 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 polecenia dołączenia pliku:

#include "NazwaPliku.hpp"

#include <cstdio>

przed rozpoczęciem kompilacji tekst plików nagłówkowych jest dołączany do tekstu programu w miejsce instrukcji #include.

Pierwsza wersja służy do dołączenia pliku znajdującego się w tym samym katalogu co program. Nazwa modułu w ostrych nawiasach oznacza, że znajduje się on w katalogu ze standardowymi plikami nagłówkowymi (dostarczonymi z kompilatorem).

Pliki nagłówkowe powinny zawierać:

Definicje funkcji powinno umieszczać się w pliku o tej samej nazwie, co nagłówkowy, z rozszerzeniem "c"/"cpp".

Przykład użycia pliku nagłówkowego (w pierwszej linii podana jest nazwa pliku):

// rnm.hpp

#ifndef _RNM_HPP
#define _RNM_HPP

float Suma(float,float);
float Roznica(float,float);

#endif
// rnm.cpp

float Suma(float x,float y)
{
     return (x+y);
}
float Roznica(float x,float y)
{
     return (x-y);
}
#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;
}

Dyrektywy:

#ifndef _RNM_HPP
#define _RNM_HPP
  
    ...

#endif

zapobiegają próbie dołączenie tego samego pliku więcej niż jeden raz - preprocesor sprawdza, czy została zdefiniowania etykieta (w tym przypadku "_RNM_HPP"), jeżeli nie - zostaje ona zainicjowana, a treść modułu jest dołączana do programu - przy następnej próbie dołączenia tego pliku preprocesor będzie już znał etykietę "_RNM_HPP", ominie więc (nie dołączy) instrukcje mię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 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 zaawansowanych funkcji matematycznych.

Pliki nagłówkowe z C używane w programach C++[edytuj | edytuj kod]

Zgodnie z ISO C++ standardowe pliki nagłówkowe o rozszerzeniu "c" w programach napisanych w C++ powinny być dołączane w następujący sposób:

#include <cNAZWAPLIKU>
#include "cNAZWAPLIKU"

gdzie NAZWAPLIKU jest nazwą bez rozszerzenia. Przykładowo, podczas gdy w C pisze się #include <stdio.h>, w C++ należy użyć zapisu #include <cstdio>.

Wikibooks-logo.svg
Zobacz podręcznik na Wikibooks: CBiblioteki