Язык C для системного программирования

Первый учебник способствовал популярности C
Это стало успешным благодаря новой свободе программистов. Его недостаток - сложность отладки программ. Он производит быстрые программы и доступна широкая коллекция API. Он остается лучшим инструментом программирования, близким к аппаратному обеспечению и используется даже для приложений. См. Why SQLite coded in C, например. Другие программы, закодированные в C: Linux, игры Doom, Quake и SimCity, Apache, NGINX, PHP, JVM, Git...
Язык C был разработан с 1969 по 1972 год Деннисом Ричи для программирования операционной системы Unix. Его целью было быть мобильным. См. раздел Разработка языка C для истории.
Учебник языка Денниса Ричи и Брайана Кернигана считается одним из лучших, когда-либо написанных.
Звучит довольно деревенско по сравнению с современными языками, но к 70-м годам, как альтернатива Basic, она была крайне развита. Вызов функции по номеру строки или с именами переменных, ограниченными двумя символами в базовой версии Microsoft AppleSoft, сделал программирование очень трудоемким. Даже Паскаль с его тяжестью и напряжениями казался менее интересным, чем С.
Это всегда может быть лучшим решением, чем C++ для системного программирования, это в любом случае мнение Linux Torvald, который решил использовать этот язык для очень широко распространенного программного обеспечения Git.
Но это суждение (в 2007 году) может быть датировано тем, что со времен C++ претерпел несколько изменений и улучшений, в том числе и с 11-й версией. Однако для критически важных системных приложений C++ остается слишком сложным и неопределенным .
Чтобы восполнить неуверенность языка C, Microsoft создала Checked C - расширение, тестирующее проблемы с памятью в программе.
Что нужно знать об истории С
Деннис Ричи и его коллега Кен Томпсон разработали язык на терминале типа Teletype 33, как показано на фото ниже.
Деннис Ричи (стоя) и Кен Томсон в Bell Labs на терминале Teletype 33
Чтобы представить, как выглядело программирование в таких условиях, мы посмотрим это видео с терминала в действии... Тогда мы лучше понимаем синтаксис языка, сделанный для сохранения удара, и где знак = выбран для назначения и = = для сравнения, потому что назначение чаще, чем сравнение! Вот клавиатура, которую ты видел поближе...
Ричи пришлось проявить изобретательность в определении языка, чтобы уменьшить количество ударов, например, с помощью оператора приращения++. Другие конструкции гораздо более сомнительны, например, вложенное назначение в сравнительный тест.
Кроме того, влияние клавиатуры касается как исходного кода компилятора, так и программ, которые он распознает. С другой стороны, современный язык можно упростить ценой более сложного компилятора. Клавиатуры хорошо изменились, но замысловатые конструкции C остаются во многих других языках, включая C++, Java, C # от Microsoft и очень недавние Go и Dart от Google и Swift .
Язык, где все - выражение
Программа C состоит из набора функций, которые возвращают значение или нет, и глобальных переменных. Все можно оценить как выражение, и это не обязательно преимущество для безопасности.
Функции и переменные имеют прототип в файле заголовка для совместного использования исходного файла.
Программист должен сам управлять памятью, используя указатели и функции для выделения или освобождения блоков памяти.
Он переносится с некоторыми ограничениями: например, дополнительные типы переменных зависят от компилятора.
Стандарт ISO C11 2011 года добавляет к языку C новые функции: многопоточность, Юникод, лямбда-функции, структуры и анонимные вложенные союзы .
Структуры данных
:Скалярные: int, long, char, char *.
struct позволяет создавать тип объекта, сформированный из нескольких переменных и являвшийся предвестником объектов.
объединение позволяет дать несколько идентификаторов переменной и используется в основном со конструкциями.
typedef для определения новых типов данных.
Контрольные структуры
:- если... else
- переключатель... случай... дефолт
- while
- для
- до... while
- разрыв, продолжение, возвращение
- гото
Символы
://и/* */комментарии.
& | & | | логические операторы .
# директива для предпроцессора.
Составные символы выполняют две операции над одной переменной. Например, a + = b добавляет b к a, а затем присваивает результат a .
Пряжка
:while(x < y)
{
... instructions ...
}
Определение функции
:int nom(char *x, int y)
{
... instructions ...
return(z);
}
Пример кода
Показывать символы строки в C.
char *s = "demo";
int l = strlen(s);
for(int i = 0; i < l; i++)
{
char c = s[i];
printf("%c\n", c);
}
См. также
- LLVM. Компилятор оптимизирован для С.
- C++. Версия С, ориентированная на объекты
- Нет, Маке. Компиляция проекта C без макефила.
Сайты и инструменты для C
- Введение в C. Первый курс на C (английский).
- Клинг. Почти полный интерпретатор C и C++.
- Tiny C Compiler. Компилирует и выполняет программы C (Win/Linux) напрямую.
- C to C++. Преобразует проект из C в C++.
- ПроверкаС. Расширение Microsoft для добавления безопасности к языку.
- Legacy-cc. Первый компилятор С, снятый Деннисом Ричи, для любопытных.
- Виолончель. Расширение для добавления динамических списков, объектов, чтобы избежать большого времени выполнения C++.
- Либмилл. Расширение для добавления к C корутинов, как у Go.