Характеристики программирования на С, которые делают его уникальным (и лучше)

Язык программирования C является матерью всех современных языков программирования

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

Приложения, написанные на C, разнообразны: от системного программного обеспечения, настольного программного обеспечения, корпоративного программного обеспечения, баз данных и т. Д. Вы бы очень хорошо начали карьеру программиста.

со знанием основ С.

Краткая история C

Развитие языка Си очень тесно связано с Unix. Он был разработан примерно в 1972 году, с большим количеством дополнений, сделанных в последующие годы.

Перед разработкой C была разработана операционная система Unix для компьютера PDP-7 на языке ассемблера. Позже на этой платформе был построен компилятор для C, опять же с использованием языка ассемблера. В настоящее время C был разработан для облегчения разработки самого Unix. Используя этот компилятор, Unix был полностью переписан на C для компьютера PDP-11. И снова, компилятор языка C был переписан на C (чему, конечно же, помогли отличные инструменты lex и yacc), тем самым завершив процесс начальной загрузки C / Unix.

Основная причина, по которой Unix был переписан на C, заключалась в переносимости. Так как языки ассемблера для разных архитектур ЦП

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

Как только язык был разработан, было признано, что его можно использовать для написания гораздо большего, чем системное программное обеспечение. И, таким образом, C начал использоваться для написания программного обеспечения, такого как файловые серверы, серверы баз данных, сетевые стеки, программное обеспечение для настольных компьютеров (и более поздние версии) веб-серверов.

, так далее.

обложка первого издания языка программирования c

В 1978 году Брайан Керниган и Деннис Ритчи опубликовали книгу «Язык программирования Си». Эта книга служила неофициальной Спецификацией языка C в течение многих лет до 1989 года, когда C был официально стандартизирован ANSI. Последняя версия C — C11, опубликованная в 2011 году.

Давайте теперь посмотрим на некоторые особенности C, которые делают его уникальным.

C против C ++: они связаны?

Поскольку более сложное программное обеспечение было разработано в C, было признано, что объектно-ориентированные концепции, включая инкапсуляцию, полиморфизм и т. Д., Помогут справиться со сложностью. Это привело к развитию C ++ как расширенного набора C.

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

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

Небольшое количество ключевых слов

Язык C был маленьким языком, несмотря на его силу. Это потому, что он объявляет только 32 слова в качестве ключевых слов с определенным значением. В отличие от этого, C ++ объявляет 82 ключевых слова, java имеет 50 зарезервированных ключевых слов, а javascript имеет 63. И COBOL объявляет колоссальные 357 ключевых слов. Представьте себе головную боль от необходимости запоминать и обходить такое большое количество ключевых слов!

Нет явного строкового типа

В отличие от большинства других современных языков

такие как Java, C ++ и JavaScript, C не предоставляет отдельный тип для строк. Строка считается массивом символов, оканчивающихся 0 символов (обозначается «\ 0»). Длина строки обозначается соглашением: количество символов до 0 символов. Вы можете игнорировать его и считать или хранить после «\ 0». Это отсутствие надлежащего типа строки и соглашения привело к бесчисленным ошибкам за эти годы, известные как переполнение буфера.

Фактически, первый червь, появившийся в интернете, Интернет-червь Morris, был результатом такой ошибки в критически важной части системного программного обеспечения, известной как палец-демон.

Вот пример такой ошибки. Это иллюстрирует, как легко ввести такие ошибки в программу. Программа компилируется нормально, но вылетает из-за переполнения буфера.

# include
main()
{
char *buf = "hello world";
buf[12] = 'a';
printf("%s\n", buf);
}

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

Манипулирование указателем

Указатель является ссылкой на ячейку памяти. C полностью гибок, когда дело доходит до чтения и записи произвольных областей памяти. Такая гибкость обходится дорого, и она стала причиной многих ошибок в спектре программного обеспечения. Наиболее заметными и влияющими на весь интернет являются такие ошибки на веб-серверах, почтовых серверах и FTP-серверах. Даже сегодня иногда появляются новости об ошибках, вызванных ссылками и обновлением неверных областей памяти.

указатели

Печально известный SSL HeartBleed Ошибка безопасности, обнаруженная в 2014 году, была результатом неправильного управления местоположением указателя и иллюстрирует решающее значение правильного управления указателем в C.

Даже случайные ошибки BSOD («синий экран смерти»), которые наблюдаются в системах Windows, также, вероятно, вызваны неправильной обработкой указателя.

Языки, отличные от C ++, не допускают манипулирования указателями и, следовательно, не уязвимы для этого класса ошибок.

Массивы и указатели взаимозаменяемы

В массиве C ссылки и указатели являются взаимозаменяемыми. Язык разрешает использование ссылки на массив

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

Широкое использование макросов «define»

Макросы используются для замены имени другим расширением. Они могут использоваться для изменения определения имени во время компиляции или для замены более длинного раскрытия простым именем. Макросистема C поддерживает IFDEF условные выражения, которые допускают условную компиляцию. Это один из способов переноса программного обеспечения на разные архитектуры и операционные системы. Общие имена определяются и заменяются во время компиляции с различными расширениями для различных условий.

Также возможно включить или исключить целые разделы кода от компиляции с использованием этих макросов

,

Они устарели, но доступны в C ++. Другие языки, такие как Java, JavaScript, python и т. Д., Не предоставляют аналогичные возможности.

Модули, заключенные в файлы

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

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

Внешние библиотеки

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

И это охватывает некоторые основные характеристики языка Си, особенно те, которые отличают его от других языков.

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

Ссылка на основную публикацию
Adblock
detector