fbpx

Каталог статей

Каталог статей для размещения статей информационного характера

Как выучить

Изучите основы программирования на C

Изучите основы программирования на C

В 1972 году Деннис Ритчи работал в Bell Labs, где несколькими годами ранее он и его коллеги по команде изобрели Unix. После создания долговечной ОС (которая используется и сегодня) ему понадобился хороший способ программирования компьютеров Unix, чтобы они могли выполнять новые задачи. Сейчас это кажется странным, но в то время существовало относительно немного языков программирования; Фортран, Лисп, Алгол и B были популярны, но недостаточны для того, что хотели сделать исследователи Bell Labs. Деннис Ричи, демонстрируя черту, которая станет известна как основная характеристика программистов, создал свое собственное решение. Он назвал его C, и почти 50 лет спустя оно по-прежнему широко используется.

Почему вам следует изучать язык C

Сегодня существует множество языков, которые предоставляют программистам больше возможностей, чем C. Самый очевидный из них – C++, язык с довольно крикливым названием, который был создан на основе C для создания хорошего объектно-ориентированного языка. Однако существует множество других языков, и для их существования есть веская причина. Компьютеры хороши в последовательном повторении, поэтому все достаточно предсказуемое, чтобы быть встроенным в язык, означает меньше работы для программистов. Зачем тратить две строки на пересчет int в long в языке C, если то же самое можно сделать в одной строке C++ ( long x = long(n); )?

И все же язык Си остается полезным и сегодня.

Во-первых, Си – это довольно минимальный и простой язык. В нем нет очень продвинутых концепций, выходящих за рамки основ программирования, во многом потому, что Си – это буквально один из фундаментов современных языков программирования. Например, в Си есть массивы, но нет словаря (если только вы не напишете его сами). Изучая C, вы осваиваете строительные блоки программирования, которые могут помочь вам распознать улучшенные и продуманные конструкции современных языков.

Программирование и разработка

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

Наконец, с языком Си легко начать работать, особенно если вы используете Linux. Вы уже можете выполнять код на языке Си, потому что в Linux-системы включена библиотека GNU C (glibc). Чтобы написать и собрать его, достаточно установить компилятор, открыть текстовый редактор и начать кодировать.

Начало работы с C

Если вы работаете в Linux, вы можете установить компилятор C с помощью менеджера пакетов. На Fedora или RHEL:

На Debian и подобных:

На macOS вы можете установить Homebrew и использовать его для установки GCC:

На Windows вы можете установить минимальный набор утилит GNU, включая GCC, с помощью MinGW.

Убедитесь, что вы установили GCC на Linux или macOS:

В Windows укажите полный путь к EXE-файлу:

Синтаксис языка C

Язык C не является языком сценариев. Он компилируется, то есть обрабатывается компилятором языка C для создания двоичного исполняемого файла. Это отличается от языка сценариев, такого как Bash, или гибридного языка, такого как Python.

В языке Си вы создаете функции для выполнения нужной вам задачи. Функция с именем main выполняется по умолчанию.

Вот простая программа “hello world”, написанная на языке C:

Первая строка включает заголовочный файл, по сути, бесплатный и очень низкоуровневый код на языке C, который вы можете повторно использовать в своих программах, под названием stdio.h (стандартный ввод и вывод). Создается функция main, которая заполняется простейшим оператором печати. Сохраните этот текст в файл под названием hello.c, затем скомпилируйте его с помощью GCC:

Попробуйте запустить вашу программу на языке C:

Возвращаемые значения

Это часть философии Unix, согласно которой функция “возвращает” что-то после выполнения: ничего при успехе и что-то другое (например, сообщение об ошибке) при неудаче. Эти коды возврата часто представляются числами (точнее, целыми числами): 0 означает “ничего”, а любое число больше 0 означает какое-то неуспешное состояние.

Есть веская причина, по которой Unix и Linux рассчитаны на молчание при успехе. Это сделано для того, чтобы вы всегда могли планировать успех, предполагая, что никакие ошибки и предупреждения не помешают вам при выполнении ряда команд. Аналогичным образом, функции в языке Си не предполагают ошибок.

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

Теперь запустите ее, используя встроенный в Linux тест на успех. Оператор && выполняет вторую половину команды только в случае успеха. Например:

Тест ||| выполняет вторую половину команды при неудаче.

Теперь попробуйте свою программу, которая не возвращает 0 при успехе; вместо этого она возвращает 1:

Программа выполнилась успешно, но не вызвала вторую команду.

Переменные и типы

В некоторых языках можно создавать переменные, не указывая, какой тип данных они содержат. Эти языки разработаны таким образом, что интерпретатор выполняет некоторые тесты для переменной, пытаясь определить, какой тип данных она содержит. Например, Python знает, что var=1 определяет целое число, когда вы создаете выражение, которое добавляет var к чему-то, что очевидно является целым числом. Аналогично он знает, что слово world является строкой, когда вы конкатенируете hello и world .

Си не делает ни одного из этих исследований за вас; вы должны определить тип вашей переменной. Существует несколько типов переменных, включая целые числа (int), символы (char), float и Boolean.

Вы также можете заметить отсутствие строкового типа. В отличие от Python, Java, Lua и многих других языков, в C нет строкового типа, и вместо этого строки рассматриваются как массив символов.

Вот простой код, который создает переменную массива char, а затем выводит ее на экран с помощью printf вместе с коротким сообщением:

Вы можете заметить, что этот пример кода допускает шесть символов для пятибуквенного слова. Это потому, что в конце строки есть скрытый терминатор, который занимает один байт в массиве. Вы можете запустить код, скомпилировав и выполнив его:

Функции

Как и в других языках, функции языка Си принимают необязательные параметры. Вы можете передавать параметры от одной функции к другой, определяя тип данных, которые должна принимать функция:

То, как этот пример кода разбивает одну функцию на две, не очень полезно, b

Чтобы сделать этот пример программы более динамичным, вы можете включить заголовочный файл string.h, который содержит код для исследования (как следует из названия) строк. Попробуйте проверить, является ли строка, переданная функции printmsg, больше 0, используя функцию strlen из файла string.h:

Как реализовано в этом примере, условие примера никогда не будет неверным, потому что передаваемая строка всегда “hello”, длина которой всегда больше 0. Последний штрих к этой скромной переделке команды echo – прием ввода от пользователя.

Аргументы команды

Файл stdio.h содержит код, который предоставляет два аргумента при каждом запуске программы: подсчет количества элементов, содержащихся в команде ( argc ), и массив, содержащий каждый элемент ( argv ). Например, предположим, что вы выдаете эту воображаемую команду:

argc – 3, а содержимое argv:

argv[0] = foo

argv[1] = -i

  • argv[2] = bar
  • Можете ли вы модифицировать пример программы на языке C, чтобы принять argv[2] в качестве строки вместо значения по умолчанию hello?
  • Императивное программирование

Си – это императивный язык программирования. Он не является объектно-ориентированным, и в нем нет структуры классов. Использование языка C может научить вас многому о том, как обрабатываются данные и как лучше управлять данными, которые вы генерируете в процессе выполнения кода. Достаточно использовать язык C, и со временем вы сможете писать библиотеки, которые смогут использовать другие языки, такие как Python и Lua.

Чтобы узнать больше о языке C, вам нужно его использовать. Поищите в /usr/include/ полезные заголовочные файлы C и посмотрите, какие небольшие задачи вы можете решить, чтобы сделать C полезным для вас. По мере изучения используйте нашу шпаргалку по C, составленную Джимом Холлом из FreeDOS. В ней все основы изложены на одном двустороннем листе, так что вы сможете сразу получить доступ ко всем основным элементам синтаксиса языка C, пока будете практиковаться.

Шпаргалка по горячим клавишам Blender

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *