C — это один из самых старых языков программирования, создаваемый в начале 70-х годов. Несмотря на это, C продолжает оставаться актуальным и активно используется в наши дни. Он был разработан для создания и до сих пор служит основой многих Unix-подобных операционных систем. На этом языке разрабатываются утилиты, компиляторы, а также, реже, прикладные приложения, что делает C системным языком программирования.
Популярность языка C обусловлена его универсальностью в сфере операционных систем, где изменения происходят не так быстро, как в среде десктопного и мобильного программного обеспечения, а также веб-приложений. C не является высокоуровневым языком, так как он ближе к архитектуре компьютера. Это позволяет создавать компактные и производительные программы.
В C отсутствует поддержка объектно-ориентированного программирования, что было введено в C++. Хотя последний был создан на базе C, он не является его «продолжением», а представляет собой самостоятельный язык, который можно изучать и без знания C. Тем не менее, освоение C перед изучением C++ предоставляет полезный опыт, так как синтаксис этих языков схож, и C помогает новичку освоить основные концепции программирования без усложнения избыточными функциями.
Является ли C хорошим выбором для начального изучения программирования? Если вы изучаете дисциплину, не связанную с IT, в вузе, то вряд ли. Язык C требует понимания архитектуры компьютера и работы с памятью, где указатели играют ключевую роль. Это сложная для начала тема, которая обычно изучается на более специализированных курсах.
Конечно, на C можно изучать основы программирования, избегая усложнений, связанных с указателями. Однако в этом случае возникает иллюзия знания C, без реального понимания его основ. Язык C был создан опытными программистами для разработки операционной системы UNIX и не предназначался для обучения новичков.
Среды и компиляторы для программирования на C
Пользователи GNU/Linux могут использовать любой текстовый редактор с подсветкой синтаксиса, дополненный GCC и терминалом.
Существуют редакторы с дополнениями, такими как встроенный терминал и просмотр каталогов, например, Geany или Atom.
C является компилируемым языком программирования. В 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++.
При сохранении файла выберите тип "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. Последняя предоставляется компанией JetBrains, лидером в производстве IDE, и предлагает 30-дневный пробный период, достаточно удобный для обучения. CLion отличается эргономичностью по сравнению с другими IDE.
"Hello World" на C
На примере простой программы рассмотрим специфические черты языка C.
В C ключевую роль играет функция main(). Она всегда должна присутствовать в программе, с нее начинается выполнение программы. Однако внутренние переменные main() не являются глобальными и действуют только в ее рамках. В C почти весь код помещен в функции, а main() является основной.
По умолчанию main() возвращает int, поэтому указание типа возврата не обязательно. Компилятор выдаст предупреждение в этом случае.
Функция printf() используется для вывода данных, аналогично процедуре write() в Pascal и функции print() в Python, но без автоматического перехода на новую строку. Для переноса используется \n. В C каждое законченное выражение оканчивается точкой с запятой.
В C функции ввода-вывода не являются частью языка. Например, в Python для использования print() и input() не требуются никакакие модули,
в отличие от C, где printf() и другие функции подключаются через заголовочный файл stdio.h. Предваряя код строкой
#include <stdio.h>
, вы включаете нужные функции. Include по-английски
означает "включить", а stdio — "стандартный ввод-вывод".
Объявления функций находятся в заголовочных файлах (*.h), которые не содержат кода функции, а только их описание, параметры и возвращаемые данные. Код функции находится в библиотеках, которые включаются препроцессором C во время компиляции программы, добавляя содержимое заголовков в начало файла программы.
Практическая работа
Закомментируйте1 первую строку программы HelloWorld и попробуйте скомпилировать ее. Был ли создан исполняемый файл? Какую ошибку выдал компилятор?
1 // - однострочный комментарий в C; /* … */ - многострочный комментарий в C.