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.