C Standardowy robi różnicę między plikami nagłówka i źródłowych określonych przez #include
przerób dyrektyw: dołączania plików
6.10.2 Źródło
ograniczeń
1 dyrektywy #include
identyfikuje nagłówek lub plik źródłowy, który może być przetwarzany przez implementację.
semantyka
2 Dyrektywa A obróbki wstępnej formy
# include <h-char-sequence> new-line
wyszukiwania sekwencji miejsc realizacji zdefiniowanej dla nagłówka jednoznacznie poprzez określonej sekwencji pomiędzy < i> ograniczników i powoduje, że zastąpienie tej dyrektywy całą treścią nagłówka. Sposób określania miejsc lub zidentyfikowany nagłówek jest zdefiniowany przez implementację.
3 Dyrektywa przerób formularza
# include "q-char-sequence" new-line
powoduje zastąpienie tej dyrektywy przez całą zawartość pliku źródłowego zidentyfikowane przez podanej kolejności między "ograniczników. Podany plik źródłowy jest przeszukiwany w sposób wdrożenia określone. Jeśli wyszukiwanie nie jest obsługiwany, lub jeśli poszukiwania nie powiedzie, dyrektywa jest przetworzony tak, jakby czytać
# include <h-char-sequence> new-line
z identycznym zawartej sekwencji (w tym> znaków, jeśli w ogóle) z lub Dyrektywa iginal.
Kompilator może zaimplementować schemat, w którym standardowe nagłówki nie są faktycznie przechowywane jako pliki w systemie plików. Ale dyrektywa #include "filename.h"
jest określona jako poszukiwanie pierwszy dla pliku w specyficzny sposób systemu, a następnie szukają standardowych nagłówków jak gdyby dyrektywa była #include <filename.h>
Należy pamiętać, że rozszerzenia nazw plików .c
i .h
są czysto konwencja odróżnić pliki zawierające deklaracje i pliki zawierające rzeczywiste definicje kodów i danych. Nic w standardzie nie czyni tej konwencji wymogiem, poza nazwami używanymi dla standardowych nagłówków. Niektórzy używają innych konwencji z różnymi rozszerzeniami lub bez rozszerzeń dla konkretnych potrzeb, ale zdecydowana większość programistów C uznałaby to za złą praktykę.
Shafik Yaghmour umieszczono cytat z C99 Uzasadnienie w odpowiedzi na podobne pytanie, że paznokcie zamiarem komisji w tej sprawie: https://stackoverflow.com/a/27262904/4593267
Na przykład możesz powiedzieć "#include"/path/to/some/named/pipe "'. Oczywiście można by się spodziewać, że nazwana potok zawsze istnieje dla każdej jednostki kompilacji, ale zapewnia, że może być trudniejsza niż jest warta (pamiętaj, że pierwsza jednostka kompilacji, która "chwyci" nazwaną potokową, może zamknąć tę potokę dla późniejszych jednostek kompilacji) – inetknght
Czy możesz dodać nieco więcej kontekstu wokół cytatu? – edmz
Przypuszczam, że mój komentarz dotyczy raczej '# include', a nie nagłówków. Czego więcej kontekstu chcesz? – inetknght