Основы программирования. Учебное пособие-1
.pdfПопытка обратиться к отдельным битам битового поля так, как если бы они были элементами массива. Битовые поля – это вовсе не «массивы бит».
Попытка взять адрес битового поля (операция & неприменима к битовым полям, так как они не имеют адреса).
Присвоениезначенияперечислимойконстанте,послетогокакона была определена, является синтаксической ошибкой.
Хороший стиль
Давать каждой создаваемой структуре имя-этикетку. Имя-эти- кетка структуры позволит объявлять далее в программе новые переменные, принадлежащие к типу этой структуры.
Осмысленный выбор имени-этикетки структуры позволит сделать программу самодокументированной.
Рекомендуется избегать использования одинаковых имен для элементовструктурразличноготипа. Этонезапрещено,номожетпривести
кнедоразумениям.
Не рекомендуется вставлять пробелы слева и справа от знаков операций . и >. Это поможет подчеркнуть, что выражения, в которых
содержатся данные операции, по существу являются именем одной переменой.
Начинать имена, определяемые typedef, с прописной буквы, чтобы подчеркнуть тот факт, что эти имена являются синонимами имен другого типа.
Для имен перечислимых констант рекомендуется использовать буквы только верхнего регистра. Это позволит выделить их в тексте программы и будет напоминать программисту, что перечислимые константы – это не переменные.
Переносимость программ
На разных машинах элементы данных отличаются размером, а крометого,оттипамашинызависиторганизациявыравниванияпамяти, поэтому и расположение структуры в памяти также зависит от типа машины.
Использование typedef помогает облегчить адаптацию программы к различным аппаратно-программным платформам.
Если сохранять данные в объединении как принадлежащие одному типу, а обращаться к ним в дальнейшем как к данным другого типа, то результат будет зависеть от реализации системы.
61
Объем памяти, необходимый для хранения объединения, зависит от типа компьютера.
Некоторые объединения невозможно просто перенести на другую компьютерную систему. Является ли объединение переносимым или нет, часто зависит от требований на выравнивание памяти для типов данных элементов объединения в конкретной системе.
Поразрядные операции с битовыми данными являются машинно зависимыми.
Реализация операции сдвиг вправо зависит от типа машины. Сдвиг вправо для отрицательного целого со знаком заполняет освобождаемые биты нулями на одних машинах и единицами на других.
Операции с битовыми полями зависят от типа машины. Некоторые компьютеры, например, позволяют битовым полям пересекать границы слов, в то время как у других компьютеров нет такой возможности.
Повышение эффективности
Вызов структуры по ссылке более эффективен, чем вызов по значению(прикоторомпроисходиткопированиевсейструктурыцеликом).
Объединения позволяют сэкономить память.
Битовые поля экономят память.
Хотя битовые поля позволяют сэкономить память, может получиться так, что полученный с их использованием машинный код будет исполняться заметно медленней. Причина этого кроется в том, что для доступа только к части адресуемой единицы памяти требуется применение дополнительных машинных операций. Это один из многочисленныхпримеров,когданеобходимоделатьвыбормежду быстродействием
икомпактностью.
Методические замечания
Как и в случае объявления struct, объявление union просто создает новый тип. Размещение объявления union или struct вне функции не создает глобальной переменной.
Работа с файлами
Распространенные ошибки
Открытие ранее созданного файла для записи ( "w" ), тогда как на самом деле пользователь хочет сохранить дынные, находящиеся в файле; содержимое файла уничтожается без предупреждения.
62
Забывают открыть файл, перед тем как ссылаться на него в программе.
Ссылаясь на файл, используют неверный указатель файла.
Открытие для чтения несуществующего файла.
Открытиефайладлячтенияилизаписибезсоответствующихпривилегий доступа к файлу (это зависит от операционной системы).
Открытие файла для записи при отсутствии свободного места на диске.
Неверный выбор режима открытия файла может привести к разрушительным ошибкам. Например, если открыть файл в режиме записи
( "w" ) вместо режима обновления ( "r+" ), то это приведет к полной потере содержимого файла.
Хороший стиль
Убедитесь, что вызовы функций, работающих с файлами, содержат корректные указатели файлов.
Явно закрывать каждый файл, как только выяснится, что программа больше не будет обращаться к файлу.
Открывайте файлы только для чтения (без возможности обновления), если записанные в файле данные не должны изменяться. Это позволит избежать неумышленного изменения содержимого файла. Это еще один пример применения принципа минимума привилегий.
Повышение эффективности
Закрытие файла освобождает ресурсы, которые, возможно, требуются другим пользователям или программам.
Многие программисты ошибочно думают, что sizeof является функцией и что ее использование приводит к увеличению времени исполнения программы, связанному с вызовом функции. Однако никакого
увеличения времени не происходит, поскольку sizeof является операцией, выполняемой во время компиляции.
Переносимость программ
Структура FILE зависит от типа операционной системы (т. е. элементы структуры меняются в зависимости от того, как каждая система обращается со своими файлами).
63
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1.Подбельский В.В. Программирование на языке C: учебное пособие для вузов по направлениям: «Прикладная математика и информатика», «Информатика и вычислительная техника», специальностям «Прикладная математика», «Вычислительные машины, комплексы, системы и сети управления». 2-е доп. изд. / В.В. Подбельский, С.С. Фомин. – Москва: Финансы и статистика, 2007. – 600 с.: ил., табл.
2.Подбельский В.В. Язык Си++ : учеб. пособие для вузов по направлениям «Прикладная математика» и «Вычислительные машины, комплексы, системы
исети». 5-е доп. изд. / В.В. Подбельский. – Москва : Финансы и статистика, 2007. – 559 с.: ил., табл.
3.Подбельский В.В. Практикум по программированию по языке C: учебн. пособие для вузов по направлениям «Прикладная математика и информатика», «Информатика и вычислительная техника», специальности «Прикладная математика и информатика» / В.В. Подбельский. – Москва : Финансы и статистика, 2004. – 574 с.: ил., табл.
4.Подбельский В.В. Программирование на языке C: учеб. пособие для вузов / В.В. Подбельский, С.С. Фомин. – Москва : Финансы и статистика, 2005. – 600 с.: ил., табл.
5.Подбельский В.В. Курс программирования на языке C: 2-е издание, переработанное. / В.В. Подбельский. – Москва: ДМК Пресс, 2018. – 384 с.
6.Пильщиков В.Н. Сборник упражнений по языку Паскаль / В.Н. Пильщиков. – Москва : Наука, 1989. – 160 с.
7.Кнут Д.Э. Искусство программирования: 3-е издание, исправленное и дополненное / Д.Э. Кнут; пер. с англ.; под общ. ред. Ю. Козаченко. – Том 1. Основные алгоритмы. – Москва : Вильямс, 2019. – 720 с.
8.ХиценкоВ.П. Методические указания к самостоятельной работе по практическим занятиям: учеб.-метод. пособие / В.П. Хиценко. – Новосибирск:
Изд-во НГТУ, 2011. – URL: https://ciu.nstu.ru/lib_redirect?id=127696 (дата обращения: 09.04.2020).
9.Макконнелл С. Совершенный код. Мастер-класс / С. Макконнелл; пер. с англ.; под общ. ред. В. Вшивцева. – Москва: Русская Редакция, 2019. – 896 с.
64
10.Дейтел П. Как программировать на C / П. Дейтел, Х. Дейтел: 7-е изд.; пер. с англ.; под ред. С. Банникова. – Москва : Бином, 2017. – 1008 с.
11.Дейтел П. C для программистов с введением в C11 / П. Дейтел, Х. Дейтел; пер. с англ. А. Киселева. – Москва : ДМК Пресс, 2016. – 544 с.: ил.
12.Керниган Б. Язык программирования C / Б. Керниган, Д. Ритчи: 2-е изд.; пер. с англ. В. Бродового. – Москва : Вильямс, 2019. – 288 с.
13.Стиль отступов. – URL: https://ru.wikipedia.org/wiki/ Отступ_(програм-
мирование) (дата обращения: 13.01.2020).
14.Стандарт кодирования GNU. – URL: http://www.opennet.ru/ docs/RUS/ coding_standard (дата обращения: 13.01.2020).
15.SEI CERT C Coding Standard. – URL: https://wiki.sei.cmu.edu/confluence/ display/c/SEI+CERT+C+Coding+Standard (дата обращения: 13.01.2020).
16.C reference (C89, C95, C99, C11, C17). – URL: https://en.cppreference. com/w/c (дата обращения: 13.01.202009.04.2020).
65
Тракимус Юрий Викторович Хиценко Валентина Павловна
ОСНОВЫ ПРОГРАММИРОВАНИЯ
Учебное пособие
Выпускающий редактор И.П. Брованова Корректор Л.Н. Киншт
Дизайн обложки А.В. Ладыжская Компьютерная верстка Л.В. Веселовская
Налоговая льгота – Общероссийский классификатор продукции Издание соответствует коду 95 3000 ОК 005-93 (ОКП)
___________________________________________________________________________________
Подписано в печать 22.01.2020. Формат 60 × 84 1/16. Бумага офсетная. Тираж 50 экз. Уч.-изд. л. 3,95. Печ. л. 4,25. Изд. № 19/18. Заказ № 291. Цена договорная
___________________________________________________________________________________
Отпечатано в типографии Новосибирского государственного технического университета
630073, г. Новосибирск, пр. К. Маркса, 20
66
