Введение в язык программирования 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-версия