Вопрос

Это все в названии; Я считаю, что супер-простой, но так сложно искать синтаксические вещи в любом месте.

Это два библиотечных файла, из которых я копирую 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 Файлы содержат «интерфейс» реализации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top