Вы всегда мечтали о том, чтобы найти более легкий способ изучения программирования на C? «Изучаем программирование на C» предлагает методику, с помощью которой вы научитесь создавать программы на этом языке. В книге используется уникальный подход, который выходит за рамки синтаксиса и пошаговых руководств и поможет вам стать отличным программистом. Вы изучите ключевые моменты, в том числе основы языка, динамическое управление памятью, указатели и арифметические операции с ними. А благодаря более продвинутым темам, таким как многопоточность и сетевое программирование, «Изучаем программирование на C» может рассматриваться в качестве учебника для студентов. Практические задания помогут усовершенствовать ваши способности, проверить приобретенные вами навыки и сделать вас более уверенным в себе.
Название: Изучаем программирование на C Автор: Гриффитс Д. Издательство: Эксмо Год: 2013 Страниц: 624 Формат: DJVU Размер: 68,6 МБ ISBN: 978-5-699-60233-9 Качество: Отличное Серия или Выпуск: Мировой компьютерный бестселлер
Содержание:
Введение: Как пользоваться этой книгой Для кого эта книга? Мы знаем, о чем подумали вы Метапознание: размышления о мышлении Вот как вы можете подчинить себе свой мозг Прочтите Команда технических рецензентов Благодарности 1. Начинаем работать с языком Си: Погружаемся Си - это язык для компактных быстрых программ Как выглядит программа на Си целиком Но как мы запустим программу? Два вида команд Код, который мы имеем в настоящий момент Подсчет карт? В Си? Кроме равенства есть и другие логические выражения Инструкция switch: вот так поворот Иногда одного раза недостаточно… Циклы часто имеют одинаковую структуру Чтобы прервать цикл, используйте break… Ваш инструментарий языка Си 2. Память и указатели: На что ты указываешь? Код на языке Си содержит указатели В недрах памяти Отправляемся в плавание с указателями Попробуйте передать указатель переменной Использование указателей в памяти Как передать строку в функцию Переменные массивов похожи на указатели О чем думает компьютер, когда выполняет ваш код Переменные массивов и указатели не одно и то же Почему массивы на самом деле начинаются с нуля Использование указателей для ввода данных Будьте осторожны при использовании scanf() Fgets() - альтернатива функции scanf() Строковый литерал никогда не может быть изменен Если вы собираетесь изменить строку - сделайте копию Как устроена память Ваш инструментарий языка Си 2.5. Строки: Теория строк В отчаянных поисках Фрэнка Создание массива массивов Находим строки, содержащие искомый текст Использование функции strstr Пришло время рассмотреть наш код Массив массивов и массив указателей Ваш инструментарий языка Си 3. Создание небольших простых инструментов: Делайте что-то одно, но делайте это хорошо Простые инструменты могут решать сложные задачи Вот как должна работать эта программа Но мы не используем файлы… Мы можем использовать перенаправление Представляем стандартный поток ошибок По умолчанию стандартный поток ошибок выводится на экран Функция fprintf() печатает в файловый дескриптор Давайте обновим наш код с учетом использования fprintf Простые инструменты обладают гибкостью Не изменяйте утилиту geo2json Для разных задач требуются разные инструменты Соедините ваш ввод и вывод с помощью канала Утилита bermuda Но что если мы хотим вывести данные в несколько файлов? Создайте собственный поток данных У функции main() есть кое-что, о чем мы пока не говорили Позвольте библиотеке сделать работу за вас Ваш инструментарий языка Си 4. Использование нескольких исходных файлов: Разбиваем на части, собираем вместе Краткое руководство по типам данных Не помещайте что-то большое во что-то маленькое Приведение типа float к целому числу О нет… Это же безработные актеры… Давайте посмотрим, что случилось с кодом Компиляторы не любят сюрпризы Отделяем объявление от определения Создаем ваш первый заголовочный файл Если у вас есть набор часто используемых возможностей… Вы можете разделить код на отдельные файлы Взгляд на компиляцию изнутри Для разделяемого кода потребуется отдельный заголовочный файл Это ведь не космические технологии… правда? Не нужно перекомпилировать каждый файл Сначала вы компилируете исходный код в объектные файлы Сложно уследить за всеми файлами Автоматизируйте процесс сборки с помощью утилиты make Как работает утилита make Сообщите утилите make о своем коде с помощью файла makefile Пуск! Ваш инструментарий языка Си Лабораторная работа 1: Arduino 5. Структуры, объединения и битовые поля: Создавайте собственные структуры Иногда приходится иметь дело с большими объемами данных Разговор в офисе Создавайте собственные структурированные типы данных с помощью структур Просто дайте им рыбу Вы можете считывать поля структуры с помощью оператора «точка» Можно ли поместить одну структуру внутрь другой? Как обновить структуру Код клонирует черепаху Вам нужен указатель на структуру (*t).age или *t.age Иногда для одного и того же типа сущностей нужны разные типы данных Объединения позволяют повторно использовать место в памяти Как пользоваться объединениями Переменная типа enum хранит обозначения Иногда нужен контроль на уровне отдельных битов Битовые поля хранят определенное количество битов Ваш инструментарий языка Си 6. Структуры данных и динамическая память: Наводим мосты Нужно ли вам гибкое хранилище? Связные списки похожи на цепочки данных Связные списки поддерживают вставку данных Создаем рекурсивную структуру Создадим острова с помощью Си… Вставляем значения в список Используйте кучу в качестве динамического хранилища Возвращайте обратно память, которая вам больше не нужна Запрашиваем память с помощью malloc() Давайте исправим наш код, применив функцию strdup() Освободите память после того, как закончите с ней работать Обзор системы ЭСИПЛ Экспертиза программного обеспечения: использование valgrind Используйте valgrind несколько раз, чтобы собрать больше улик Рассмотрим улики Проверяем на практике наше решение Ваш инструментарий языка Си 7. Продвинутые функции: Выжмите из своих функций все соки В поисках идеала Передача кода в функцию Нам нужно передать в find () имя функции Имя функции является указателем на эту функцию… … но такого типа данных, как функция, не существует Как создать указатель на функцию Выполняем сортировку с помощью стандартной библиотеки Си Наводим порядок с помощью указателей на функции Автоматизируем составление уведомительных писем Создаем массив указателей на функции Сделайте свои функции эластиииииичными Ваш инструментарий языка Си 8. Статические и динамические библиотеки: Легко заменяемый код Код, который вы можете принести с собой в банк Угловые скобки предназначены дня стандартных заголовков Но что если вы хотите разделять код? Разделяем заголовочные файлы Разделяем объектные файлы .o с помощью полного пути Архив содержит объектные файлы Создайте архив с помощью команды аг… И наконец, скомпилируйте другие свои программы Тренажерный зал Head First выходит на международный уровень Подсчет калорий Но все немного сложнее… Программы состоят из множества частей… Динамическая компоновка происходит во время выполнения программы Можно ли скомпоновать архив во время выполнения программы? Сначала создадим объектный файл На разных платформах динамические библиотеки называются по-разному Ваш инструментарий языка Си Лабораторная работа 2: OpenCV 9. Процессы и системные вызовы: Разрушая границы Системные вызовы - это ваша прямая связь с операционной системой Кто-то проник в систему Безопасность не единственная проблема Функция ехес() дает вам больший контроль Существует много функций ехес() Функции с поддержкой массивов - execv(), execvp(), execve() Передача переменных среды Большинству системных вызовов присущи одни и те же проблемы Читаем новости с помощью RSS ехес() - конечная остановка для вашей программы Запуск дочернего процесса с помощью fork() + ехес() Ваш инструментарий языка Си 10. Межпроцессное взаимодействие: Общение - это хорошо Перенаправление ввода и вывода Типичный процесс изнутри При перенаправлении всего лишь меняются потоки данных С помощью fileno() можно получить дескриптор Иногда нужно подождать Поддерживайте связь со своим детищем Соединяйте свои процессы с помощью каналов Практический пример: открытие новостей в браузере Дочерний процесс Родительский процесс Открытие веб-страницы в браузере Смерть процесса Перехват сигналов для запуска собственного кода sigaction регистрируется с помощью функции sigaction() Перепишем код с использованием обработчика сигнала Чтобы посылать сигналы, используйте команду kill Ваш инструментарий языка Си 11. Сокеты и работа в Сети: Нет места лучше, чем 127.0.0.1 Интернет-сервер «Тук-тук» Обзор сервера «Тук-тук» Как сервер разговаривает с Интернетом Сокеты - это не совсем обычные потоки данных Иногда сервер стартует не так, как положено Говорила же мама всегда делать проверку на ошибки Прием данных от клиента Сервер может общаться только с одним чечовеком в отдельный момент времени Вы можете клонировать процесс для каждого клиента Написание веб-клиента Клиент всегда прав Создаем сокет дчя IP-адреса Getaddrinfo() получает адреса доменов Ваш инструментарий языка Си 12. Потоки: Это параллельный мир Задачи выполняются последовательно… или нет… … и разбиение на процессы не всегда подходит Простые процессы выполняют только одну задачу за один раз Наймите дополнительный персонал - используйте потоки Как создавать потоки Создаем поток с помощью pthread_create Код небезопасен с точки зрения многопоточности Вам нужно добавить светофоры Используйте мьютексы как светофоры Ваш инструментарий языка Си Лабораторная работа 3: Бластероиды Приложение I. На закуску: Топ-10 фактов (которым мы не уделили внимание) № 1. Операторы № 2. Директивы препроцессора № 3. Ключевое слово static № 4. Определение размера № 5. Автоматизированное тестирование № 6. Еще немного о gcc № 7. Еще немного о make № 8. Средства разработки № 9. Создание пользовательских интерфейсов № 10. Справочные материалы Приложение И. Все темы: Вспомнить все Алфавитный указатель