Я не использую 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. Я думаю, что это - превосходный инструмент для этого типа задач.
.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 (весь!), Что является пустой тратой времени и источником проблем.
Конечно, ничто не говорит о том, что расширение файла заголовка должно быть .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 - это исходные файлы, которые будут скомпилированы. Файлы .h используются для предоставления доступа к API программы либо другой части этой программы, либо другой программе, если вы создаете библиотеку.
Например, программа PizzaDelivery может иметь 1 файл .c с основной программой, и 1 файл .c с служебными функциями. Теперь, чтобы основная часть программы могла использовать служебные функции, вам необходимо предоставить API через прототип функции в файл .h, причем этот файл .h включается в основной файл .c.
.c : 'C' source code
.h : Header file
Обычно файлы .c
содержат реализацию, а файлы .h
содержат «интерфейс» реализации.
На самом деле это не библиотечные файлы. Это просто исходные файлы. Как сказал Стефано, файл .c является исходным файлом C, который фактически использует / определяет фактический источник того, что он просто обрисовал в файле .h , файле заголовка. Заголовочный файл обычно описывает все прототипы функций и структуры, которые будут использоваться в фактическом исходном файле. Думайте об этом как о справочнике / приложении. Это очевидно при просмотре файла заголовка, как вы увидите :) Итак, когда вы хотите использовать что-то, что было написано в этих исходных файлах, вы #include
заголовочный файл, который содержит информацию, которая компилятору необходимо знать.