Программирование

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

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

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

Приложения, написанные на 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 ++ можно было объединить в одной программе и скомпилировать с тот же компилятор. Это позволило повторно использовать старые модули на основе Си с минимальными изменениями в более крупной программе, написанной с использованием объектно-ориентированных концепций.

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

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

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

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

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

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

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

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

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

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

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

указатели

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Похожие посты
Программирование

Что такое канал RSS? (И где его взять)

Программирование

7 причин, почему изображения не загружаются на ваш сайт

Программирование

Запустите агент SQL Server: настройте SQL Server 2012

Программирование

15 лучших бесплатных обоев дня Святого Патрика