#include
w języku C++.
Cytując z MSDN:
The #include directive tells the preprocessor to treat the contents of a specified file as if those contents had appeared in the source program at the point where the directive appears.Tak.
#include
to jest copy-paste. Ta dyrektywa nie robi nic innego, tylko zwyczajnie wkleja podany plik w miejsce siebie samej. Nie ma w tym żadnej dodatkowej magii - kompilator będzie widział dołączony plik dokładnie tak, jakby programista ręcznie wpisał jego zawartość w miejscu dyrektywy #include
. Z tego faktu wypływa kilka istotnych wniosków:
- Pliki nagłówkowe nie są niczym specjalnym. Nie muszą mieć rozszerzenia .h/.hpp, mogą mieć rozszerzenie .kolorowe-kredki - nikomu to nie robi różnicy, ponieważ pliki nagłówkowe nie są kompilowane.
- Użycie
#include
nie ogranicza się do "dołączania plików nagłówkowych". Ponieważ jest to tylko i wyłącznie kopiuj-wklej zawartość podanego pliku, można napisać na przykład coś takiego:
W praktyce, taka konstrukcja jest nawet dość mądra - dane, zwłaszcza generowane automatycznie, lepiej trzymać na zewnątrz niż bezpośrednio w kodzie.float dane[] = { #include "dane.txt" };
- O plikach nagłówkowych należy myśleć jak o kopiowaniu-wklejaniu kodu. Przyjęcie takiego punktu widzenia pozwala łatwo zrozumieć i wyczuć, dlaczego stosujemy deklaracje
#ifndef
/#endif
oraz dlaczego nie umieszczamy w nagłówkach kodu funkcji innych niż inline.
#include
nie ma żadnej magii. Trzeba tylko na tę dyrektywę patrzeć we właściwy sposób. Preprocesor C/C++ jest bardzo prostym narzędziem. A #include
jest bardzo prostym copy-paste'm.