Языку C уже почти 50 лет, но он всё равно крут

Языку C уже почти 50 лет, но он всё равно крут

Почему на нём программируют до сих пор.

Когда разговор заходит о программировании, многие вспоминают про язык C и про то, какие фантастические возможности есть у тех, кто умеет на нём программировать. Давайте разберёмся, что же такого особенного в этом языке и почему программировать на C сложнее, чем на современных языках.

Немного важной истории

Сам язык C придумал Деннис Ритчи в 1972 году — в то время было чёткое разделение языков программирования:

  • ассемблеры — для системного программирования, операционных систем и драйверов;
  • языки высокого уровня для остальных прикладных задач.

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

У него получился эффективный и мощный язык, который на то время получил лучшее от двух миров: скорость и мощь ассемблера и понятный синтаксис языков высокого уровня. Даже почти 50 лет спустя C — самый быстрый и эффективный язык для системного программирования.

В чём сила языка С

На C можно написать программу, которая сможет дотянуться до любого железа на компьютере и использовать его в своих целях. Вы получаете полный контроль над всей памятью и аппаратным устройством компьютера.

Вот что делает C таким мощным языком:

  • работа с любой областью памяти;
  • явные области видимости имён — то, что вы объявляете внутри функции, доступно только внутри этой функции, если явно не задать обратное;
  • простой базовый синтаксис, из которого можно собрать конструкцию любой сложности;
  • простая система типов данных — она может показаться сложной, но для системного языка это действительно простая система;
  • полная вседозволенность компилятора — он ругается только на грубые синтаксические ошибки, а что происходит во время выполнения программы, его не касается;
  • можно подключать любые готовые модули для расширения возможностей языка и встроенных команд;
  • есть компиляторы для любой операционной системы, что позволяет писать относительно кроссплатформенный код.

Получается, что на C можно написать программу, которая может делать с железом, памятью и процессором что угодно, если в самом коде нет синтаксических ошибок. Но это часто оборачивается минусами, о них сейчас и поговорим.

Минусы программирования на С

Если бы всё было так просто, у C не было бы репутации одного из сложных языков программирования. Штука в том, что все минусы C — это обратная сторона его плюсов. Смотрите сами:

  • Так как компилятор следит только за самыми грубыми ошибками в синтаксисе, то ему неважно, что происходит с рабочей памятью. Из-за этого легко обратиться не к той области памяти. В лучшем случае это нарушит работу самой программы, а в худшем — сломает другие программы и операционную систему (память-то на всех общая).
  • Нет встроенных средств очистки памяти, всё нужно делать вручную. Если про это забыть, программа может занять всю свободную оперативную память.
  • Изначальная ориентированность только на процедурное программирование не позволяет реализовать ООП-подход в программах. Есть способы обойти это ограничение через указатели, но это сложные конструкции.

По сути, единственная основная современная претензия к C в том, что там нет полноценной реализации ООП. Все остальные минусы — побочный эффект того, что программист должен сам предусматривать все нештатные ситуации и следить за памятью и поведением программы.

👉 Можно провести такую аналогию: программировать на C — это как ездить на гоночном болиде Формулы 1. Это очень мощно, быстро и эффектно, но без опыта и абсолютного знания о том, как управлять этим болидом, пилот сразу вылетит за ограждение. Механика вместо автомата, отсутствие умных помощников типа курсовой устойчивости и помощи при заносах — всё вручную, но взамен пилот получает абсолютный контроль над машиной и ставит рекорды.

Синтаксис — коротко

Комментарии. Классика — делать их вот так:

/* это комментарий */

Но с 1999 года можно оформлять их с начала строки:

// это тоже комментарий

Фигурные скобки. Это важная часть языка — внутри таких скобок язык воспринимает команды как одно целое. Ими задаются границы в циклах, функциях и в любых местах, где нужно сгруппировать несколько команд.

Математические и логические операторы. Тут всё стандартно и выглядит точно так же, как в Python или JavaScript (которые как раз и позаимствовали многое из С). Но в C список таких операторов намного шире: здесь есть и поразрядные операторы, и побитовые, и даже тернарный оператор ? : (это краткая форма условного оператора).

Условные операторы. Самый простой — классический if:

if ((условие)) (команда_1) else (команда_1)

Ещё есть множественный условный оператор switch, который позволяет выбирать несколько возможных значений по условию.

Циклы. C ними всё просто — обычные while-do, do-while и for. Сюрпризов в описаниях нет, просто задаём условие цикла и ставим фигурные скобки в теле цикла.

Пример программы

Давайте напишем код, который считает сумму чисел от единицы до введённого числа:

#define _CRT_SECURE_NO_WARNINGS // чтобы компилятор не ругался на scanf
#include <stdio.h> // подключаем стандартный модуль ввода-вывода
int main() { // начало главной функции
  int k;  // объявляем целую переменную key
  int i = 1; // сразу объявляем переменную со значением
  int sum = 0; // на старте сумма равна нулю
  printf("k = "); // выводим строчку на экран, но пока без значения суммы
  scanf("%d", &k);   // ждём ввода числа и записываем его в переменную k
  while (i <= k)     // делаем цикл — пока i меньше или равно k
  { // как раз те самые фигурные скобки для тела цикла
    sum = sum + i; // добавляем значение i к сумме
    i++;           // увеличиваем i на 1
  } // закончилось тело цикла
  printf("sum = %d\n", sum); // выводим значение суммы, оно получится на той же строке, что и первая строчка
  getchar(); // ждём нажатия любой клавиши, чтобы пользователь мог успеть прочитать ответ
  return 0; // знак того, что программа завершилась без ошибок
} // конец программы

Где применяется С

Многие думают, что на C пишут только драйвера и программы для микропроцессоров, но область применения C намного шире. Сейчас на C пишут:

  • операционные системы — большинство ОС в мире написаны на C или С++;
  • драйверы — то же самое, конкуренцию составляет только ассемблер;
  • программы для микроконтроллеров, умных гаджетов, систем охраны и всяких датчиков;
  • сервисы и фрагменты кода в прикладных программах там, где важно быстродействие.Например, у вас есть сервер, который работает с базой данных, и вам нужно, чтобы он эти данные получал как можно быстрее. В этом случае проще реализовать этот сервис на С, и тогда он будет работать так быстро, насколько это вообще возможно.

С чего начать

Если вы ещё учитесь в школе (или недавно закончили), почитайте Константина Полякова — у него целая авторская подборка по обучению программированию на С.

«Язык программирования С» — книга от самих авторов языка. Классика учебной литературы.

Онлайн-компилятор языка C — пригодится тем, кто хочет перейти от теории к практике.

Веб-разработка — это новый черный
А мы знаем толк в моде и поможем освоить новую специальность за полгода.
Посмотреть
Фронтенд — это новый черный
Еще по теме
prev
next
Sublime Text
Почему настоящие мастера пишут всё в Sublime Text

Вообще всё.

Векторы: третий уровень сложности
Векторы: третий уровень сложности

Знакомимся с коллинеарностью.

Что о вас на самом деле знают Google и Facebook (и все остальные)

Если коротко — они знают о вас почти всё. Но с этим тоже можно что-то сделать.

Что такое канбан
Что такое канбан

Самый узнаваемый атрибут айтишных команд.

Что такое «Докер» и зачем он нужен
Что такое «Докер» и зачем он нужен

Это как полуфабрикаты из супермаркета, только с программами.

Как парень из Томска руководит бэкенд-разработкой в Практикуме
Как парень из Томска руководит бэкенд-разработкой в Практикуме

О CTF-турнирах и пути в Яндекс.

Что такое легаси в коде
Что такое легаси в коде

Однажды, Симба, всё это будет твоим

Как на microSD-карточке помещается 1 терабайт?

И это не предел.

Двоичное счисление на пальцах

Все знают, что компьютеры состоят из единиц и нулей. Но что это значит на самом деле?

Как устроена и зачем нужна двухфакторная аутентификация
Как устроена и зачем нужна двухфакторная аутентификация

Когда нужно ещё что-то кроме пароля.

easy