Введение в язык программирования C (Си)

C — это достаточно "древний" язык программирования, он сформировался в начале 70-х. Не смотря на это, Си — живой язык в том смысле, что он активно применяется в настоящее время. Он был придуман, использовался и используется для написания частей программного кода Unix-подобных операционных систем. Также на нем пишут утилиты, компиляторы, программы для встраиваемых систем и реже пользовательские прикладные программы. Поэтому C называют системным языком программирования.

Его живучесть можно объяснить тем, что принципы работы операционных систем относительно универсальны, они не подвержены тому прогрессу и разнообразию, которые можно наблюдать в среде десктопного и мобильного ПО, Web-приложений. C не является языком достаточно высокого уровня, он ближе к архитектуре компьютера. Поэтому на Си можно писать более эффективные и быстрые программы.

Хотя в C есть библиотека, в которой эмулируются возможности ООП, в чистом виде язык не поддерживает объектно-ориентированное программирование. Таковое реализовано в C++, который возник на основе C, но не является его продолжением, а представляет собой отдельный язык, который можно изучать, не зная Си. C++ широко используется в прикладном программировании.

Подходит ли C для первого знакомства с программированием? Если вы не обучаетесь в вузе по специальности, связанной с IT, то нет. C предполагает понимание организации и принципов работы аппаратного обеспечения, в частности – памяти. Здесь многое делается с помощью указателей, они играют ключевую роль; эта тема достаточно сложная для понимания и обычно не изучается в школе.

Конечно, с помощью C можно изучать основы программирования и не изучать при этом указатели. Однако человек будет думать, что знает C, мало зная о нем по существу. Язык C был создан разбирающимися в устройстве "железа" профессиональными программистами для написания операционной системы UNIX. Его не задумывали как язык для обучения начинающих.

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

Если вы пользуетесь одним из дистрибутивов GNU/Linux, вам подойдет любой текстовый редактор с подсветкой синтаксиса, а лучше специально предназначенный для программирования, также понадобятся GCC и терминал. На скрине ниже показаны исходный код программы в Sublime Text, ее компиляция и исполнение в терминале.

Си – компилируемый язык программирования. В GNU/Linux для получения исполняемых файлов используется GCC – набор компиляторов, включающий в том числе компилятор для C. Чтобы из исходного файла (обычно таким файлам дают расширение *.с) получить исполняемый, надо выполнить в терминале команду примерно следующего вида:

gcc -o hello hello.c

, где gcc — команда, запускающая программу, выполняющую компиляцию и иные действия; -o – ключ, сообщающий, что мы вручную указываем имя исполняемого файла; hello – имя получаемого исполняемого файла; hello.c – имя файла с исходным кодом. Имя исполняемого файла можно не указывать:

gcc hello.c

В этом случае исполняемый файл будет иметь имя по умолчанию a.out.

Для Windows существует свой набор компиляторов – MinGW. Его можно использовать самостоятельно, однако он входит в состав простой среды разработки Dev-C++, которая может оказаться хорошим выбором для обучения программированию на языках C и С++.

При сохранении выбирайте тип файла "C source files (*.c)". Компиляция и запуск программы выполняется при нажатии клавиши F9. После исполнения программа сразу закрывается и результат невозможно увидеть. Чтобы этого не происходило, прописывают две дополнительные строки: #include <conio.h> и getch(). (Возможно это не актуально для более новой версии Dev-C++.)

"Hello World" в GNU/Linux:

#include <stdio.h>
 
int main () {
    printf ("Hello World\n");
}

"Hello World" в Windows:

#include <stdio.h>
#include <conio.h>
 
int main () {
    printf ("Hello World\n");
 
    getch();
}

С другой стороны, существует большое количество кроссплатформенных сред разработки. Например, Eclipse + модуль CDT, KDevelop, CLion.

"Hello World" на C

На примере простейшей программы сразу отметим некоторые особенности языка программирования Си.

Роль основной ветки программы берет на себя функция main(). Она является точкой входа и всегда должна присутствовать в законченной программе на языке C. При этом объявленные внутри нее переменные не являются глобальными, их область видимости простирается только на main(). Тем не менее в языке программирования C почти весь программный код заключается в функции, и функция main() является главной.

По умолчанию функция main() возвращает тип данных int, поэтому можно не указывать тип возвращаемых данных. Однако компилятор в этом случае выносит предупреждение.

Функция printf() предназначена для вывода данных. Ее назначение аналогично функции print() в Python. Однако printf() после вывода не выполняет переход на новую строку. Поэтому для перехода используется специальный символ, который обозначается комбинацией \n.

Выражения на языке Си разделяются точкой с запятой.

В языке C функции ввода-вывода не являются частью языка. Например, в Python нам не надо импортировать никакой модуль, чтобы пользоваться функциями print() и input(). В C функцию printf(), а также ряд других, следует подключить с помощью заголовочного файла stdio.h. Именно с этой целью в начале программы добавляется строка #include <stdio.h>. Include с английского переводится как "включить", а stdio есть сокращение от "стандартный ввод-вывод (input-output)".

В заголовочных файлах (они оканчиваются на *.h) обычно содержатся объявления тех или иных функций. Объявление ‒ это только описание функции: какие параметры она принимает и что возвращает. Сам код функции (определение) находится не в заголовочном файле, а в библиотеках (других файлах), которые могут быть уже скомпилированы и расположены в системных каталогах. Перед компиляцией программы запускается препроцессор языка C. Помимо прочего он включает в начало файла программы содержимое указанных в ней заголовочных файлов.

В Си двумя слэшами // обозначается однострочный комментарий, /* … */ ‒ многострочные комментарии.

Курс с решением задач:
pdf-версия


Основы языка C. Курс




Все разделы сайта