Co robisz?c i.rozszerzenia plików h oznaczają C?
To wszystko jest w tytule; super-proste, jak sądzę, ale tak trudno szukać czegoś w dowolnym miejscu.
Są to dwa pliki biblioteczne, które kopiuję z CS50.net , i zastanawiam się, dlaczego mają dwa różne rozszerzenia.
6 answers
.c: plik c (gdzie w ogóle jest prawdziwa akcja)
.h: plik nagłówkowy (do dołączenia do dyrektywy preprocesora #include
). Zawiera rzeczy, które są zwykle uważane za współdzielone z innymi częściami kodu, jak prototypy funkcji, #define ' d stuff, deklaracja extern dla zmiennych globalnych (oh, the horror) i tym podobne.
Na przykład w cs50.h można znaleźć tak zwane "deklaracje forward" swoich funkcji. Deklaracja forward jest szybkim sposobem przekazania kompilatorowi jak powinna być wywoływana funkcja (np. jakie parametry wejściowe) i co zwraca, aby mogła prawidłowo sprawdzać (na przykład jeśli wywołasz funkcję z niewłaściwą liczbą parametrów, będzie narzekać).
Kolejny przykład. Załóżmy, że napiszesz .plik C zawierający funkcję wykonującą dopasowanie wyrażeń regularnych. Chcesz, aby Twoja funkcja akceptowała Wyrażenie regularne, pasujący łańcuch znaków i parametr, który mówi, czy porównanie ma być niewrażliwe na wielkość liter.W .c ty będzie zatem umieścić
bool matches(string regexp, string s, int flags) { the code }
Teraz Załóżmy, że chcesz przekazać następujące flagi:
0: jeśli w wyszukiwaniu rozróżnia się wielkość liter
1: Jeśli wyszukiwanie jest niewrażliwe na wielkość liter
I chcesz być otwarty na nowe flagi, więc nie umieściłeś logiki. gra z liczbami jest trudna, więc definiujesz przydatne nazwy dla tych flag
#define MATCH_CASE_SENSITIVE 0
#define MATCH_CASE_INSENSITIVE 1
Ta informacja idzie do .h, ponieważ jeśli jakiś program chce używać tych etykiet, nie ma możliwości ich poznania, chyba że włączysz info. Oczywiście można je umieścić wc, ale wtedy musiałbyś dołączyć .kod c (cały!), co jest stratą czasu i źródłem kłopotów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-08 03:35:38
Oczywiście nic nie mówi, że rozszerzenie pliku nagłówkowego musi być .h
, A rozszerzenie pliku źródłowego C musi być .c
. Są to użyteczne konwencje.
E:\Temp> type my.interface
#ifndef MY_INTERFACE_INCLUDED
#define MYBUFFERSIZE 8
#define MY_INTERFACE_INCLUDED
#endif
E:\Temp> type my.source
#include <stdio.h>
#include "my.interface"
int main(void) {
char x[MYBUFFERSIZE] = {0};
x[0] = 'a';
puts(x);
return 0;
}
E:\Temp> gcc -x c my.source -o my.exe
E:\Temp> my
a
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-08 16:03:10
To nie są pliki biblioteczne. To tylko pliki źródłowe. Jak powiedział Stefano, .plik C jest plikiem źródłowym C, który faktycznie używa / definiuje rzeczywiste źródło tego, co zostało tylko opisane w .h Plik, plik nagłówkowy. Plik nagłówkowy zazwyczaj przedstawia wszystkie prototypy funkcji i struktury, które będą używane w rzeczywistym pliku źródłowym. Pomyśl o tym jak o referencji / dodatku. Widać to po obejrzeniu pliku nagłówkowego, jak widać:) więc wtedy, gdy chcesz aby użyć czegoś, co zostało napisane w tych plikach źródłowych, należy #include
plik nagłówkowy, który zawiera informacje, które kompilator będzie musiał znać.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-08 03:08:57
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-08 03:07:38
The .pliki c są plikami źródłowymi, które zostaną skompilowane. The .pliki h są używane do wystawiania API programu do innej części tego programu lub innego programu jest tworzenie biblioteki.
Na przykład program PizzaDelivery może mieć 1 .plik c z głównym programem, oraz 1 .plik c Z FUNKCJAMI narzędziowymi. Teraz, aby główna część programu mogła korzystać z funkcji narzędziowych, musisz udostępnić API, za pomocą prototypu funkcji, do .plik h, to .plik h zaliczony do:plik C.
.c : 'C' source code
.h : Header file
Zazwyczaj pliki .c
zawierają implementację, a Pliki .h
zawierają "interfejs" implementacji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-08 03:08:07