Что означают расширения файлов .c и .h .h?
Вопрос
Это все в названии; Я считаю, что супер-простой, но так сложно искать синтаксические вещи в любом месте.
Это два библиотечных файла, из которых я копирую Cs50.net, И мне интересно, почему у них два разных расширения.
Решение
.c: c -файл (где реальное действие, в целом)
.H: Файл заголовка (должен быть включен в препроцессор #include
Директива). Содержит вещи, которые обычно считаются деленными с другими частями вашего кода, например, прототипы функций, #define'd Stuff, Extern Declaration для глобальных переменных (о, ужас) и тому подобное.
Технически вы можете поместить все в один файл. Целая программа C. миллион линий. Но мы, люди, склонны организовывать вещи. Таким образом, вы создаете разные файлы C, каждый из которых содержит определенные функции. Это все красиво и чисто. Тогда вдруг вы понимаете, что декларация У вас есть в заданный файл C также должен существовать в другом файле C. Итак, вы бы их дублировали. Поэтому лучше всего извлечь декларацию и поместить его в общий файл, который является .h.
Например, в CS50.H вы найдете то, что называется «форвардными объявлениями» ваших функций. Прямое объявление - это быстрый способ рассказать компилятору, как следует вызывать функцию (например, какие входные параметры) и что она возвращает, чтобы она могла выполнить правильную проверку (например, если вы называете функцию с неправильным количеством параметров, это будет жаловаться).
Другой пример. Предположим, вы пишете файл .c, содержащий функцию, выполняющую регулярное соответствие выражения. Вы хотите, чтобы ваша функция приняла регулярное выражение, строку для соответствия и параметр, который сообщает, должно ли сравнение быть нечувствительным.
В.
bool matches(string regexp, string s, int flags) { the code }
Теперь предположим, что вы хотите передать следующие флаги:
0: если поиск чувствителен к корпусу
1: Если поиск нечувствителен к корпусу
И вы хотите оставить себя открытыми для новых флагов, так что вы не ставили логическое. Играть с числами сложно, поэтому вы определяете полезные имена для этих флагов
#define MATCH_CASE_SENSITIVE 0
#define MATCH_CASE_INSENSITIVE 1
Эта информация входит в .h, потому что, если какая -либо программа хочет использовать эти этикетки, у нее нет возможности узнать их, если вы не включите информацию. Конечно, вы можете поместить их в.
Другие советы
Конечно, нет ничего, что говорит о расширении файла заголовка .h
и расширение исходного файла C должно быть .c
. Анкет Это полезные соглашения.
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
Они на самом деле не библиотечные файлы. Это просто исходные файлы. Как сказал Стефано, .C. Файл - это исходный файл C, который фактически использует/определяет фактический источник того, что он просто изложен в .час Файл, файл заголовка. Файл заголовка обычно описывает все прототипы функций и структуры, которые будут использоваться в фактическом исходном файле. Думайте об этом, как о ссылке/приложении. Это очевидно при рассмотрении файла заголовка, как вы увидите :) Так что, когда вы хотите использовать что -то, что было написано в этих исходных файлах, вы #include
Файл заголовка, который содержит информацию, которую компилятор должен знать.
.C - исходный файл, а .h - Файл заголовка.
Файлы .c - это исходные файлы, которые будут составлены. Файлы .h используются для выявления API программы для либо другой части этой программы, либо другой программы, вы создаете библиотеку.
Например, программа Pizzadelivery может иметь 1 .c -файл с основной программой и 1 .c -файл с функциями утилиты. Теперь, чтобы основная часть программы была способна использовать функции утилиты, вам необходимо выставить API с помощью прототипа функций, в файл .h, этот файл .h включен в основной файл .c.
.c : 'C' source code
.h : Header file
Обычно .c
Файлы содержат реализацию, и .h
Файлы содержат «интерфейс» реализации.