Что.c и.h расширения файла значат для C?

Я не использую Visual Studio ( да, действительно, я не использую ее ), но , Автогорячая клавиша может повторно отобразить любую горячую клавишу глобально или в конкретном приложении:

#IfWinActive Microsoft Excel (application specific remapping)

; Printing area in Excel (@ Ctrl+Alt+A)
^!a::
Send !ade
return

#IfWinActive


$f4::
; Closes the active window (make double tapping F4 works like ALT+F4)
if f4_cnt > 0 
{
    f4_cnt += 1
    return
}

f4_cnt = 1
SetTimer, f4_Handler, 250
return

f4_Handler:
SetTimer, f4_Handler, off

if (f4_cnt >= 2)    ; Pressed more than two times
{   
    SendInput !{f4}
} else {
    ; Resend f4 to the application
    Send {f4}
}

f4_cnt = 0
return

Это два переотображения моего основного сценария AutoHotKey. Я думаю, что это - превосходный инструмент для этого типа задач.

51
задан Alex Mcp 3 February 2017 в 09:44
поделиться

6 ответов

.c: c файл (где реальное действие, в общем)

.h: заголовочный файл (включается в директиву препроцессора #include ). Содержит вещи, которые обычно используются совместно с другими частями вашего кода, такие как прототипы функций, #define'd вещи, объявление extern для глобальных переменных (о, ужас) и тому подобное.

Технически вы могли бы поместить все в одном файле. Целая программа на C. миллион строк. Но мы, люди, склонны все организовывать. Таким образом, вы создаете разные файлы C, каждый из которых содержит определенные функции. Все красиво и чисто. Затем вы внезапно понимаете, что объявление , которое у вас есть в данном файле C, должно существовать также в другом файле C. Так что вы бы их продублировали. Поэтому лучше всего извлечь объявление и поместить его в общий файл с расширением. Предварительное объявление - это быстрый способ сообщить компилятору, как должна быть вызвана функция (например, какие входные параметры) и что она возвращает, чтобы он мог выполнить правильную проверку (например, если вы вызываете функцию с неправильным количеством параметров, она будет жаловаться)

Другой пример. Предположим, вы пишете файл .c, содержащий функцию, выполняющую сопоставление регулярных выражений. Вы хотите, чтобы ваша функция принимала регулярное выражение, строку для сопоставления и параметр, который сообщает, должно ли сравнение быть нечувствительным к регистру.

в .c вы поэтому поместите

bool matches(string regexp, string s, int flags) { the code }

Теперь предположим, что вы хотите передать следующие флаги:

0: если поиск чувствителен к регистру

1: если поиск нечувствителен к регистру

И вы хотите оставаться открытыми для новых флагов, поэтому вы не поместили логическое значение. играть с числами сложно, поэтому вы определяете полезные имена для этих флагов

#define MATCH_CASE_SENSITIVE 0
#define MATCH_CASE_INSENSITIVE 1

. Эта информация попадает в .h, потому что, если какая-либо программа захочет использовать эти метки, у нее нет возможности узнать их, если вы не включите эту информацию. Конечно, вы можете поместить их в .c, но тогда вам придется включить код .c (весь!), Что является пустой тратой времени и источником проблем.

100
ответ дан 7 November 2019 в 09:55
поделиться

Конечно, ничто не говорит о том, что расширение файла заголовка должно быть .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
18
ответ дан 7 November 2019 в 09:55
поделиться

.c - это исходный файл, а .h - это файл заголовка .

2
ответ дан 7 November 2019 в 09:55
поделиться

Файлы .c - это исходные файлы, которые будут скомпилированы. Файлы .h используются для предоставления доступа к API программы либо другой части этой программы, либо другой программе, если вы создаете библиотеку.

Например, программа PizzaDelivery может иметь 1 файл .c с основной программой, и 1 файл .c с служебными функциями. Теперь, чтобы основная часть программы могла использовать служебные функции, вам необходимо предоставить API через прототип функции в файл .h, причем этот файл .h включается в основной файл .c.

1
ответ дан 7 November 2019 в 09:55
поделиться
.c : 'C' source code
.h : Header file

Обычно файлы .c содержат реализацию, а файлы .h содержат «интерфейс» реализации.

0
ответ дан 7 November 2019 в 09:55
поделиться

На самом деле это не библиотечные файлы. Это просто исходные файлы. Как сказал Стефано, файл .c является исходным файлом C, который фактически использует / определяет фактический источник того, что он просто обрисовал в файле .h , файле заголовка. Заголовочный файл обычно описывает все прототипы функций и структуры, которые будут использоваться в фактическом исходном файле. Думайте об этом как о справочнике / приложении. Это очевидно при просмотре файла заголовка, как вы увидите :) Итак, когда вы хотите использовать что-то, что было написано в этих исходных файлах, вы #include заголовочный файл, который содержит информацию, которая компилятору необходимо знать.

6
ответ дан 7 November 2019 в 09:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: