Основы программирования c книга
Книги по языку Си для начинающих и не только
- Книги, 21 марта 2017 в 21:09
- Иван Бирюков
Язык Си — это очень мощный язык программирования, и к тому же один из самых популярных. Он очень гибок и не накладывает на программиста никаких ограничений, но именно это и может стать проблемой при изучении. Поэтому мы подобрали для вас несколько книг, которые помогут разобраться с основами языка, не отстрелив себе пару конечностей
The C Book
Книга «The C Book» предназначена для тех, кто уже имеет опыт программирования на высокоуровневых языках. Она посвящена моментам, характерным именно для Си.
- Введение в Си.
- Переменные и арифметика.
- Логические выражения и условные операторы.
- Функции.
- Массивы и указатели.
- Структуры данных.
- Препроцессор.
- Особенности Си.
- Библиотеки.
- Примеры программ.
Программирование на С для начинающих
«Программирование на С для начинающих» — учебник для максимально быстрого освоения языка, содержащий в себе много практического материала. Изложение четкое и простое, вы узнаете, как организовать программу, хранить и отображать данные, работать с переменными, операторами, вводом/выводом, указателями, массивами, функциями и многими другими вещами.
Пособие содержит всё самое важное, что вам нужно знать для программирования на C:
- Структура программы.
- Логические операторы и выражения.
- Переменные.
- Циклы.
- Встроенные функции.
- Массивы и указатели.
- Тестирование программ.
C Elements of Style
«C Elements of Style» — это полезное руководство, описывающее основы хорошего стиля программирования. Оно научит вас писать код, который будет легко читать, понимать и поддерживать.
В книге вы найдёте советы по написанию комментариев, именованию переменных, форматированию, организации каталогов, созданию сборочных файлов и другим темам.
Изучаем программирование на C
Книга из серии Head First, которая использует те же подходы, что и другие книги цикла. Материал подается в достаточно игровой форме и с использованием огромного количества иллюстраций. В книге рассматриваются:
- основы языка Си;
- динамическое управление памятью;
- указатели и арифметические операции с ними;
- многопоточность;
- сетевое программирование.
Если вы не можете осилить классические учебники по Си, то не отчаивайтесь и попробуйте эту книгу. Она подойдет даже для новичков, не изучавших никогда программирование вообще.
Программирование на C для начинающих
Еще один хороший учебник по Си. Рассчитан на читателей, никогда не писавших кода и стремящихся начать свое знакомство с программированием именно с Си. Написан доступным языком. Из-за нацеленности на новичков книга охватывает не все аспекты языка. Из минусов можно выделить опечатки в тексте и программном коде. Но для настоящих кодеров такое никогда не было проблемой!
Build Your Own Lisp
Изучайте язык Си и одновременно пишите свой язык программирования — минималистскую версию Lisp — меньше чем за 1000 строк кода.
Эта книга предназначена для тех, кто хочет изучить Си и / или написать свой язык программирования. Однако вам явно потребуется какой-то опыт написания кода, поэтому в качестве первой книги мы её не рекомендуем.
The GNU C Reference Manual
«The GNU C Reference Manual» — это шпаргалка по языку Си стандартов C89 ANSI, C99 ISO и расширениям GNU. Она точно не нужна начинающим программистам.
- Лексические элементы.
- Типы данных.
- Выражения и операции.
- Операторы.
- Функции.
- Структура программы и области видимости.
- Пример программы.
The GNU C Programming Tutorial
Руководство «The GNU C Programming Tutorial» понятным образом объясняет читателю основы языка. Оно подробно описывает все основные элементы Си и рассказывает, как писать на нём программы, делая акцент на компиляторе GNU/Linux.
Рассматриваются такие темы, как функции, переменные и их объявление, области видимости, операторы, указатели, циклы, массивы, строки, а также многие другие.
Essential C
Эта книга — небольшая методичка, составленная в Стэнфорде. Она вкратце описывает все основы языка Си. Из-за сжатых объяснений рекомендуется, чтобы у читателя уже был опыт программирования.
Затрагиваются такие темы: переменные, операторы, циклы, функции, ссылки, указатели, структуры, препроцессор и стандартная библиотека.
- Вступление.
- Базовые типы и операторы.
- Условные операторы.
- Сложные типы данных.
- Функции.
- Препроцессор.
- Массивы и указатели.
- Стандартная библиотека.
Beej’s Guide to C Programming
Книга «Beej’s Guide to C Programming» пытается вывести читателя из состояния полного непонимания Си и дать ему понять, что Си — это лучший язык программирования.
- Основы программирования.
- Переменные, выражения и операторы.
- Возвращение к основам.
- Функции.
- Переменные, часть 2.
- Указатели.
- Структуры.
- Массивы.
- Строки.
- Динамическая память.
- Продвинутые фичи.
- Стандартная библиотека ввода / вывода.
- Управление строками.
- Математика.
Modern C
«Modern C» стремится мотивировать читателя повысить свой уровень знания языка. Книга разделена на 5 уровней:
- Первый уровень предоставляет читателю базовые знания о программах Си, их целях и структуре.
- Второй уровень описывает основные принципы и фичи, такие как условные операторы, типы данных и функции.
- Третий уровень ведёт к сердцу Си. Он рассказывает об указателях, модели памяти языка и его стандартной библиотекеe.
- Четвёртый уровень затрагивает такие продвинутые темы, как производительность, атомарность, потоки, и другие.
- Пятый уровень — в нём автор описывает своё видение развития языка.
An Introduction to GCC
Руководство «An Introduction to GCC» рассказывает о C и C++ компиляторах GNU, gcc and g++, являющихся частью GNU Compiler Collection (GCC).
- Вступление.
- Компиляция Си-программы.
- Опции компиляции.
- Использование препроцессора.
- Компиляция для отладки.
- Компиляция с оптимизацией.
- Компиляция CPP-программы.
- Платформо-специфические опции.
- Решение проблем.
- Инструменты.
- Принципы работы компилятора.
- Изучение скомпилированных файлов.
- Типичные ошибки.
- Дополнительные материалы.
Вот ещё несколько бесплатных книг по языку Си:
И, разумеется, не стоит забывать про каноничную книгу Кернигана и Ритчи: The C Programming Language. Сложная, не для начинающих, но по праву признана шедевром.
C / C++
Русский
Параллельное программирование на С++ в действии. Практика разработки многопоточных программ. Энтони Уильямс
В наши дни компьютеры с несколькими многоядерными процессорами стали нормой. .

Программирование на С для начинающих. М. МакГрат
С — это компактный компьютерный язык программирования общего назначения, созданный .

Алгоритмы и программы. Язык С++. Е. Конова, Г. Поллак
При изложении материала авторы используют методику обучения от алгоритмов к .

Expert C Programming: Deep Secrets. P. Linden
C programming is a craft that takes years to perfect. .

Программирование на С для начинающих. 3-е изд. Грег Перри, Дин Миллер
Простое и понятное руководство по программированию на С поможет быстро .

Программирование: учебное пособие. Л.А. Надейкина
В Учебном пособии рассматривается на базе языка С++ одна из .

Введение в язык Си++. А.В.Столяров
Краткое (объём четвёртого издания — 136 страниц) введение в язык .

Объектно-ориентированное программирование в С++. Р. Лафоре
Основная задача этой книги — научить вас создавать программы на .

Введение в C++. 4-ое издание. А. В. Столяров
Краткое введение в язык Си++. Содержание построено по принципу плавного .

Объектно-ориентированное программирование на C++. Пол Айра
Если вы хотите писать качественные приложения, с хорошей архитектурой и .

Язык программирования С. Брайан Керниган, Деннис Ритчи
Книга по программированию от авторов языка C.
В своё .
- попробуйте пройти короткие (6-7 вопросов) тесты на темы std::vector и std::list. Эти тесты касаются мизерной и самой простой части содержимого книг.
- ответьте сами себе в рамках такого опросника:
- есть у вас ссылка на элемент vector/list/deque — вы делаете вставку нового элемента в контейнер. Останется ли валидной ссылка?
- что изменится если вместо ссылке в предыдущем вопросе использовать итератор?
- какие есть типы итераторов? Что такое адаптеры итераторов и как ими пользоваться?
- знаете ли вы как удалить элементы с определенным значением из вектора/списка/ассоциативного контейнера?
- что изменится если нужно удалить элементы, удовлетворяющие определенному условию? (особенно std::map/std::set )?
- знаете ли вы, какие возможности дает istreambuf_iterator?
- что делать, если нужно отсортировать вектор не полностью, а только его часть? — что умеет std::nth_element ? А как быть с std::list?
- чем map::operator[] отличается от map::insert ? Что выбрать для вставки элемента?
- знаете ли вы о том, какие функции есть в STL для работы с отсортированными векторами и пирамидами? Есть ли смысл строить на такой структуре данных множество?
- что делают фукнция std::replace_copy_if , std::remove_copy_if , std::unique , std::random_shuffle ? — это касается не зазубривания, а того, будете ли вы писать свой велосипед или хотя бы попробуете найти готовую функцию для перемешивания массива;
- как можно использовать std::copy и std::copy_backward ? — Можно ли копировать элементы между контейнерами разных типов? Использовать их с файловыми итераторами? Можно ли применять их для копирования элементов внутри одного и того же контейнера ?
Книга Аммерааля, откровенного говоря, очень скучная, почти как справочник. Читать ее стоит по диагонали, однако, я выбрал для вас наиболее интересные (с моей точки зрения) моменты:
1. Из первой главы можно узнать зачем вообще нужны итераторы и как их не стоит использовать. Хорошо написано про категории итераторов. Если вы не знаете что такое Erase–remove idiom — то эту главу точно нужно просмотреть. Тут же можно прочитать про ряд полезных алгоритмов: sort, find, copy, merge, replace_reverse, find_if, remove_if — однако эта часть очень скучна, хотя, полезно знать что такие алгоритмы вообще существуют (ну чтобы не писать велосипеды).2. Во второй главе описаны ассоциативные контейнеры и ряд алгоритмов. Если вы не знаете что такое set/map — то можно почитать. В третьей главе подробно описываются vector (и vector ), list и deque, стоит заглянуть если вы не знаете как может быть реализован deque внутри (тут перекликается с одним из советов Маерса — не использовать deque вместо вектора без особой необходимости, хоть он и эффективнее). Если вы не используете в своей работе операции splice, remove и merge для std::list — то также почитайте.
3. Вы слышали про set_intersection/set_union? — если нет, посмотрите примеры к четвертой главе (из них все понятно, текст читать не стоит). Если не знаете что такое адаптеры контейнеров (stack, queue, priority_queue) — загляните в пятую главу. Из полезного в шестой главе — адаптеры итераторов (inserter) и std::transform (незаслуженно забытый студентами).
4. В седьмой главе описаны алгоритмы, опять же как в справочнике, но с хорошими примерами. Нет смысла всех их перечислять, но заглянуть туда стоит если вы не слышали про: adjacent_find, mismatch, copy (им можно хитро пользоваться, а также есть copy_backward), generate, random_shuffle, partition (и stable_partition). А знали ли вы, что STL есть генератор перестановок, операции с пирамидами, а также ряд операций, позволяющих работать с массивами (отсортированными) как со множествами? — знать детали всех этих функций не обязательно (для этого есть справочник), а вот знать что такое вообще существует — нужно.
Что касается второй книги (Мейерса) — то в ней традиционно (для этого автора) материал упорядочен в виде советов. Читается она интересно и увлекательно (местами даже может оказаться удивительно). Перечислять что из нее можно узнать смысла нет, т.к. лучше просмотреть список советов и читать лишь те, что вам интересны (я бы на всякий случай просмотрел все).
Итог: эти две книги не являются учебниками по STL, чтобы научиться им пользоваться — надо ставить задачу и писать код. Книги же помогут вам набить меньше шишек. Читать лучше сначала Аммерааля, а потом уже Мейерса, т.к., несмотря на то, что вторую книгу читать проще, ориентирована она на людей, уже знакомых с STL — упор в ней больше делается на тонкости.
Язык программирования Си
практический курс
Что это такое?
В свое время (1991-1992 года), выбрав язык Си в качестве основного языка программирования для математических классов, автор столкнулся с проблемой отсутствия нормальных учебников, которые можно было бы рекомендовать школьникам. Это вынудило его написать свой конспект лекций, который можно было бы назвать «Практический курс программирования на Си» — в него вошли те сведения, которые действительно требовались автору на практике. Многолетний опыт преподавания показал, что конспект действительно востребован и широко используется как школьниками, так и выпускниками.
В качестве среды разработки используется бесплатно распространяемая оболочка Dev-C++ с открытым исходным кодом, включающая компилятор GCC.
Автор будет благодарен за отзывы и конструктивную критику по поводу содержания и оформления этих материалов. Если вы заметили ошибку или у вас есть предложения, замечания, жалобы, просьбы и заявления, пишите.
Лицензионное соглашение
Все опубликованные ниже материалы могут быть свободно использованы в некоммерческих целях при условии сохранения авторства.
Скачивание материалов означает, что вы приняли условия этого лицензионного соглашения.
Скачать
Конспект распространяется свободно в формате PDF. Для просмотра требуется бесплатный просмотрщик Acrobat Reader. Конспект курса условно разбит на 4 части:
- Введение в программирование на языке Си (860 Кб)29.03.2014
Изучение основных конструкций языка и приемов написания программ. - Xранение и обработка данных (792 Кб)21.11.2013
Язык Си: массивы, матрицы, структуры, символьные строки, структуры, рекурсия. - Разработка программ на языке Си (937 Кб)01.03.2014
Приемы проектирования программ, структурное программирование, целочисленные алгоритмы, численные методы, моделирование. - Динамические структуры данных в языке Си (666 Кб)11.06.2009
Списки, стеки, деревья, графы.
Презентации
Для преподавателей и учащихся могут быть полезны презентации, построенные на основе этого конспекта. Их можно скачать на странице Презентации.
Методика
В программе предусмотрено изучение языка Си в 7-11 классах:
Часть I представляет собой расширенный конспект курса 7 класса. Введение в язык Си строится на базе алгоритмической подготовки, которую дети получили в 6 классе, работая с исполнителями.
Основная задача — познакомить учащихся с основными конструкциями языка Си: циклами, условными операторами, процедурами. Весьма успешно проходит изучение разделов, связанных с графикой, анимацией.
Для работы с графикой через браузер можно использовать онлайн-сервис Антона Деникина.
Программа включает следующие разделы (в скобках указана часть конспекта): Массивы (II), Работа с файлами (II), Символьные строки (II), Вращение объектов (III), Моделирование (III). Особое внимание уделяется изучению алгоритмов работы с массивами, в том числе поиска, сортировки и т.п. Дается понятие об эффективности вычислительных методов.
Основное внимание уделяется изучению методов разработки программ на языке Си. Учащиеся выполняют индивидуальное задание, в ходе которого учатся строить графики на экране, знакомятся с преобразованиями систем координат, изучают методы решения уравнений, знакомятся с численными методами, учатся правильно оформлять программы (разделы 1-2 части III). Одно из заданий посвящено использованию метода Монте-Карло для вычисления площади сложной фигуры. Из новых разделов изучаются также Матрицы (II), Массивы символьных строк (II). Вводится понятие указателей и изучаются простейшие операции с ними.
Изучения языка Си выходит на более серьезный уровень. Основные темы — Управление памятью (II), Рекурсия (II), Структуры (II). Предусмотрено изучение языка Паскаль в качестве второго языка программирования. С этого момента алгоритмы на теоретических занятиях записываются поочередно на двух языках.
Изучаются не столько особенности языков, сколько алгоритмы. Основные разделы — Численные методы (III), Моделирование (III), Динамические структуры данных (IV).
Программирование на С для начинающих, Майк МакГрат, 2016
Программирование на С для начинающих, Майк МакГрат, 2016.
В этой книге с помощью примеров программ и иллюстраций, показывающих результаты работы кода, разбираются вес ключевые аспекты языка С. В этой книге описано даже то, как установить бесплатный компилятор для языка С и работать в нем, — у вас просто не будет шансов ошибиться!
Книга идеально подойдет программистам, переключающимся на работу с другим языком, студентам, изучающим язык С, а также тем, кто только начинает свою профессиональную деятельность и хочет научиться основам процедурного программирования.Установка компилятора языка С.
Программы на языке С изначально создаются как простые текстовые файлы, сохраняемые с расширением .с. Они могут быть написаны в любом текстовом редакторе, даже в программе Блокнот (Notepad) операционной системы Windows — никакого специального программного обеспечения не требуется.Для того чтобы выполнить программу, написанную на языке С, необходимо ее «скомпилировать» в байт-код, который компьютер сможет понять. Компилятор языка С считывает оригинальную текстовую версию программы и переводит ее во второй файл, имеющий исполняемый байтовый формат, который сможет распознать компьютер.
Если текст программы содержит синтаксические ошибки, компилятор об этом сообщит, и исполняемый файл не будет построен.
Один из наиболее популярных компиляторов языка С — GNU С Compiler (GCC) — доступен бесплатно под лицензией General Public License (GPL). Он включен во все дистрибутивы операционной системы Linux. GNU С Compiler был использован для компилирования в исполняемый код всех примеров этой книги.Оглавление.
Введение.
1 Приступаем к работе.
Введение в язык С.
Установка компилятора языка С.
Написание программы на языке С.
Компилирование программы на языке С.
Понимание процесса компилирования.
Заключение.
2 Сохранение значений переменных.
Создание переменных в программе.
Отображение значений переменных.
Ввод значений переменных.
Спецификаторы типов данных.
Использование глобальных переменных.
Размещение переменных в регистрах.
Преобразование типов данных.
Создание массивов переменных.
Описание нескольких измерений.
Заключение.
3 Установка значений переменных.
Объявление констант в программе.
Перечисление значений констант.
Создание константного типа.
Определение констант.
Отладка с помощью определений.
Заключение.
4 Выполнение операций.
Выполнение арифметических операций.
Присваивание значений.
Сравнение значений.
Логические значения.
Проверка условий.
Измерение размера.
Сравнение битовых значений.
Флаги.
Знакомство с приоритетами.
Заключение.
5 Создание утверждений.
Проверка значений выражений.
Ветвление с помощью операции switch.
Зацикливание с помощью счетчика.
Зацикливание с помощью условия.
Досрочный выход из циклов.
Переход к меткам.
Заключение.
6 Использование функций.
Объявление функций.
Передача аргументов.
Рекурсивные вызовы.
Размещение функций в заголовках.
Ограничение доступности.
Заключение.
7 Указатели.
Получение доступа к данным с помощью указателей.
Арифметика указателей.
Передача указателей в функции.
Создание массивов указателей.
Указатели на функции.
Заключение.
8 Работа со строками.
Чтение строк.
Копирование строк.
Объединение строк.
Поиск подстрок.
Валидация строк.
Преобразование строк.
Заключение.
9 Создание структур.
Группирование данных в структуру.
Определение типа данных с помощью структуры.
Использование указателей в структурах.
Указатели на структуры.
Передача структур в функции.
Группирование данных в объединение.
Выделение памяти.
Заключение.
10 Получение результата.
Создание файла.
Чтение и запись символов.
Чтение и запись строк.
Считывание и запись файлов целиком.
Сканирование файловых потоков.
Сообщение об ошибках.
Получение даты и времени.
Запуск таймера.
Генерация случайных чисел.
Отображение диалогового окна.
Заключение.
Справочная информация.
ASCII-коды символов.
Функции ввода и вывода.
Функции проверки символов.
Арифметические функции.
Функции работы со строками.
Вспомогательные функции.
Диагностические функции.
Функции для работы с аргументами.
Функции для работы с датой и временем.
Функции переходов.
Сигнальные функции.
Константы пределов.
Константы с плавающей точкой.
Основы программирования на языке С.
Предметный указатель.Бесплатно скачать электронную книгу в удобном формате, смотреть и читать:
Скачать книгу Программирование на С для начинающих, Майк МакГрат, 2016 — fileskachat.com, быстрое и бесплатное скачивание.Скачать pdf
Ниже можно купить эту книгу по лучшей цене со скидкой с доставкой по всей России. Купить эту книгу

Метапрограммирование шаблонов C++ в задачах математической физики. М.М. Краснов
Рассматривается применение метапрограммирования шаблонов языка C++ для упрощения записи алгоритмов .
English
The C programming language. 2 ed. B. W. Kernighan, D. M. Ritchie
The computing world has undergone a revolution since the publication .
Test Driven Development for Embedded C. J. W. Grenning
I was first exposed to Test-Driven Development at the first .
C Programming in Linux. David Haskins
So where do we start? A sensible place is “at .
Structured Programming with C++. Kjell Bäckman
The purpose of the course Structured Programming with C/C++ is .
Understanding and Using C Pointers. R. M. Reese
Numerous books have been written about C. They usually offer .
Programming in C. S. G. Kochan
The C programming langguage was pioneered by Dennis Ritchie at .
API Design for C++. Martin Reddy
API Design for C++ provides a comprehensive discussion of Application .
The C++ Standard Library. Nicolai M. Josuttis
The Best-Selling C++ Resource Now Updated for C++11
The .
C++ Templates. David Vandevoorde, Nicolai M. Josuttis, Douglas Gregor
Templates are among the most powerful features of C++, but .
Effective Modern C++. Scott Meyers
Topics include:
The pros and cons of braced initialization, .
Objective-C for Absolute Beginners. Gary Bennett, Brad Lees, Mitchell Fisher
Learn Objective-C and its latest release, and learn how to .
Optimized C++. Kurt Guntheroth
This book is here to help you get your job .
Литература по С++
Когда я учился такой книги, к сожалению, не было. Книга толстая, но читать ее интересно. Автор не является членом комитета стандартизации языка, а преподает в ВУЗе, поэтому написал не справочник, а учебник. Это лучший учебник по С++, который я видел. Прата собрал весь свой педагогический опыт и сделал упор именно на те аспекты, с которыми у студентов возникают проблемы (как ни странно, но у моих студентов те же самые проблемы, поэтому я рекомендую им эту книгу). Книга новая и в ней описывается новый стандарт. Специально под фичи С++11 выделено всего 50 страниц, но по ходу всей книги делаются небольшие отступления на эту тему.
Хорошая книга от автора языка. Текст книги сухой, хотя в ней есть примеры, советы по поводу «хорошего кода» и даже упражнения. Лично я, использую ее в качестве справочника — как учебник книга вряд ли может сравниться с произведением Прата.
Рецензия от другого, уважаемого мной программиста:
Бьерн Страуструп — это удивительный человек, сочетающий в себе несочетаемые вещи. Во-первых, это человек, придумавший один из самых гениальных языков современности. Во-вторых, это человек, дающий ужасающие рекомендации по программированию на собственном языке.
Если вы уже успели потратить свои деньги на приобретение этой книги, то будьте бдительны. Отнеситесь к ней как к справочнику возможностей языка C++ и не воспринимайте близко к сердцу советы, которые дает автор книги (за исключением банальных типа инкапсуляции данных).
У меня сложилось впечатление, что книга писалась в жутко укуренном состоянии. Совершенно никакой последовательности мысли. Напоминает письмо дяди Федора из Простоквашино. Читается тяжело и муторно, насквозь пронизана бессмысленными и никому не нужными лирическими отступлениями.
Когда я впервые читал эту книгу в русскоязычном издании, я долго не мог понять, какому идиоту пришло в голову сверстать исходники наклонным, и главное, не моноширинным шрифтом. Когда я узнал, что предпочтения относительно шрифта исходили от самого автора, мне вообще поплохело.
Диагноз
Данная книга категорически противопоказана неокрепшим умам. Если ее и стоит читать, то только тогда, когда вы научитесь безошибочно отделять плохие рекомендации от хороших. Чтение этой книги с целью получения новых знаний похоже на добычу золота из морской воды.
Две книги Скотта Мейерса для углубленного изучения С++. Выполнены в виде сборников правил типа: «Никогда не вызывайте виртуальные функции в конструкторе или деструкторе». Правила касаются понимания концепций объектно-ориентированного программирования, вопросов управления памятью, обработки ошибок и эффективности кода. К правилами прилагается исчерпывающее объяснение. В очень небольшой части материал книг пересекается, но в целом, они дополняют друг друга. Начать изучение стоит с книги «35 рекомендаций» — она попроще.
Отзыв от уважаемого мной программиста:
Если вы будете читать эту книгу впервые, то сначала у вас закипит мозг, после чего вы свалитесь со стула, а после того, как придете в себя, первой вашей мыслью будет фраза «Них#я себе, что можно на C++ вытворять!».
Это одна из тех редких книг, которую нужно прочесть всем, кто желает стать настоящим профессионалом своего дела.
Книга рассказывает об основных паттернах проектирования с упором на их реализацию. Особый восторг вызывают фирменные метапрограммные рецепты господина Александреску.
Единственным, но в то же время практически незаметным недостатком, я считаю несколько недостаточное внимание, уделенное разделению предлагаемых подходов на хорошие и плохие. Однако, если ваш мозг будет в состоянии понять, о чем же именно рассказывает эта книга, то такое разделение вы сможете сделать самостоятельно без особого труда.
Отзыв от уважаемого мной программиста:
На мой взгляд это одна из лучших книг (если не самая лучшая) из серии «C++ In-Depth». Коротко, просто и по делу. Ничего лишнего, ни одной плохой рекомендации. Создается ощущение, что читаешь некий доклад о том как нужно программировать, основанный на опыте всех программистов, полученном с момента создания языка C++, из которого тщательным образом было отобрано только самое лучшее и выкинута вся муть, которую выдумывают современные воспаленные мозги.
Остается добавить, что само название, «101 правило и рекомендация», это не просто бойкое маркетинговое название, выдуманное молодым маркетологом-энтузиастом. Книга действительно представляет собой сто одну коротенькую рекомендацию по программированию.
Если вы еще не успели прочитать эту книгу, то я рекомендую вам сделать это без отлагательств — результат превзойдет все ваши ожидания.
Краткое содержание книги прекрасно описано в первой главе, не буду дублировать, перечислю лишь то, что привлекло внимание.
Первая часть посвящена языку С++, ее можно рассматривать как очень краткое, но глубокое введение в язык.
— во второй главе приведено очень поверхностное изложение тонкостей С++, а также множество коварных фрагментов кода, на которых можно проверить знаете ли вы язык в достаточном объеме чтобы читать дальше или нет.
— третья глава посвящена шаблонам (templates). Если вы до этого не сталкивались с ними — то по приведенному материалу сможете разобраться. Все, что там описано работает, но стоит учитывать, что книга писалась в 90х годах, сейчас возможности шаблонов гораздо шире.
— глава 4 посвящена обработке исключений, написана в том же стиле, что и третья. Можно использовать как полноценный учебник.
Во второй части книги рассказывается про умные указатели и итераторы. Очень подробно, про всякие разные. Поразительно, что по этой теме написано так много… Например, про умные указатели писал в своих книгах Майерс, но совсем с другой стороны. Наиболее понравилась глава 7 про «грани и другие мудрые указатели» и глава 9 «транзакции и гениальные указатели».
В части 3 речь идет о двойной диспетчеризации, производящих функциях и, опять же, умных (на этот раз «невидимых») указателях. Материал местами отдает академизмом, но все равно интересно.
В четвертой части речь идет о памяти — перегрузке операторов new и delete, при этом описывается несколько алгоритмов, которые могут улучшить работу с памятью в ваших программах, в том числе уплотнения памяти и сборки мусора. Мое личное мнение — все это интересно, но реализовать качественно эти алгоритмы слишком сложно и не совсем очевидны случаи когда стоит это делать. Так, например, недавно я публиковал аннотацию на доклад по похожей теме: https://vk.com/wall-105242702_701, в котором нечто подобное (не все) реализовано в malloc. Вероятно, в тех редких случаях, когда вас не устраивает стандартный malloc — можно использовать другую реализацию.
Резюме: книга интересная. Первая глава однозначно имеет практическую направленность. Остальная часть книги интересна, полезна для кругозора и местами на практике (например раздел по двойной диспетчеризации).
Многие ребята, занимающиеся промышленной разработкой на С++ сообщили мне, что не читали эти книги, но хотели бы (времени нет). Нужно ли вам читать их или вы уже знаете STL? — выяснить это я предлагаю так: