Przejrzyste Programowanie – #3 – Struktura pliku nagłówkowego i źródłowego

Kilka słów na początek.

Plik nagłówkowy oraz źródłowy tworzą tak zwaną bibliotekę. Biblioteki zawierają funkcje, które można wykorzystać w innych programach. W celu szybszego nawigowaniu po kodzie programu zalecane jest zdefiniowanie i stosowanie jednego szablonu. W poniższym wpisie przedstawię strukturę pliku nagłówkowego oraz źródłowego z jakiej korzystam.

Zakres artykułu.

  • plik nagłówkowy „.h”
  • plik źródłowy „.c”

Plik nagłówkowy ".h"

Plik nagłówkowy rozpoznajemy po rozszerzeniu „.h”. Struktura tego pliku jest następująca:

[sourcecode language=”c”] #ifndef PLIK_H #define PLIK_H /* Includes ——————————————————————*/ /* Defines ——————————————————————-*/ /* Types ———————————————————————*/ /* Constants —————————————————————–*/ /* Macros ——————————————————————–*/ /* Functions —————————————————————–*/ #endif /* PLIK_H */ [/sourcecode]

Plik nagłówkowy powinien zawierać informacje, które potrzebne są użytkownikowi do poprawnego i pełnego wykorzystania biblioteki.

Zaleca się, aby plik nagłówkowy był opatrzony instrukcją warunkową preprocesora #ifndef #define i #endif. Taka struktura pliku nagłówkowego zapobiega kilkukrotnemu kompilowaniu tego samego kodu przez kompilator.

  • /* Includes */ – pod tym komentarzem wstawiamy poprzez dyrektywę #include pliki wykorzystywane przez program;
  • /* Defines */ – pod tym komentarzem wstawiamy dyrektywę preprocesora opatrzoną słowem kluczowym #define oraz #undef;
  • /* Types */ – pod tym komentarzem wstawiamy typy wyliczeniowe „enum”, „struktury”, „unie” oraz zmienne opatrzone słowem kluczowym „extern”;
  • /* Constants */ – pod tym komentarzem wstawiamy stałe które opatrzone są słowem kluczowym „const”;
  • /* Macros */ – pod tym komentarzem wstawiamy makra;
  • /* Functions */ – pod tym komentarzem wstawiamy deklaracje funkcji.

Plik źródłowy ".c"

Plik nagłówkowy rozpoznajemy po rozszerzeniu „.c”. Struktura tego pliku jest następująca:

[sourcecode language=”c”] /* Includes ——————————————————————*/ /* Private typedef ———————————————————–*/ /* Private define ————————————————————*/ /* Private macros ————————————————————*/ /* Private variables ———————————————————*/ /* Private functions declaration ———————————————*/ /* Functions —————————————————————–*/ /* Private functions ———————————————————*/ [/sourcecode]

W odróżnieniu od pliku nagłówkowego plik źródłowy powinien zawierać informacje o których użytkownik biblioteki nie musi wiedzieć. W tym miejscu zalecane jest deklarowanie i definiowanie elementów programu ze słowem kluczowym „static”. z wyjątkiem definicji funkcji zadeklarowanych w pliku nagłówkowym, które mają być dostępne dla użytkownika.

  • /* Includes */ – tak samo jak w pliku nagłówkowym;
  • /* Private typedef */ – pod tym komentarzem definiujemy typy pochodne;
  • /* Private define */ – tak samo jak w pliku nagłówkowym;
  • /* Private macros */ – tak samo jak w pliku nagłówkowym;
  • /* Private variables*/ – pod tym komentarzem definiujemy zmienne przeważnie opatrzone słowem kluczowym „static”;
  • /* Private functions declaration */ – pod tym komentarzem wstawiamy deklaracje funkcji opatrzone słowem kluczowym „static”;
  • /* Functions */ – pod tym komentarzem wstawiamy definiujemy ciało funkcji;
  • /* Private functions */ – pod tym komentarzem wstawiamy definiujemy ciało funkcji opatrzone słowem kluczowym „static”.

Na koniec

W zależności od potrzeb struktura plików nagłówkowych i źródłowych może być modyfikowana w większym lub mniejszym stopniu, jednakże zawsze warto pamiętać o opracowaniu zasad, które będą przeciwdziałać wkradającemu się chaosowi.

Autor artykułu
Dominik Bednarski

Podobne wpisy

Dodaj komentarz