- •1. Лексические основы языка Си. Константы и модификаторы3. Выражения
- •2. Структура программы на языке Си. Функция main.
- •3. Функции. Структура функций. Разновидности. Особенности использования.
- •4. Типы данных. Классификация типов.
- •5. Базовые типы данных. Определение имени типа. Перечисление.
- •6. Представление данных в памяти компьютера.
- •7. Явное / Неявное преобразование типов. Абстрактный описатель.
- •8. Операторы. Классификация операторов. Приоритеты операторов и порядок их выполнения.
- •9. Инструкции языка Си, их классификация. Простые инструкции.
- •10. Инструкции языка Си, их классификация. Составные инструкции.
- •11. Производные типы данных. Статические массивы. Особенности использования массивов в функциях.
- •Статические массивы
- •12. Динамические массивы. Особенности обработки динамических массивов.
- •13. Производные типы данных. Указатели. Особенности использования. Адресная арифметика.
- •14. Операции над указателями. Указатели и модели памяти. Модификаторы.
- •15. Массивы и указатели. Передача и возврат параметров в функцию.
- •16. Указатели на функции. Особенности использования.
- •17. Указатели на указатели. Косвенная адресация. Многоуровневые ссылки.
- •18. Динамические структуры данных. Списки. Особенности использования.
- •19. Строки. Операции над строками. Указатели на строки.
- •20. Структурные типы данных: структуры. Особенности использования.
- •21. Структуры и объединения. Особенности использования.
- •22. Структуры. Массивы структур. Передача массивов структур в функции.
- •23. Указатели и структуры. Передача структур по указателю.
- •24. Структура битовых полей. Особенности использования.
- •25. Основы файловой системы: файл, каталог, дисковод, полное имя файла, внутреннее представление информации в файле. Типы файлов.
- •26. Файлы. Особенности обработки файлов последовательного доступа.
- •27. Файлы. Особенности обработки файлов произвольного доступа.
- •28. Память. Классы памяти. Модификаторы классов памяти. Область видимости, время жизни и место размещения объекта в памяти.
- •29. Передача параметров в функцию main. Аргументы командной строки. Директивы препроцессора.
- •30. Функции с переменным списком параметров. Механизмы передачи параметров в функции с переменным списком параметров.
- •Void va_start(arg_ptr,prav_param);
- •Va_list arg_ptr;
- •31. Перегрузка функций. Встроенные функции.
- •32. Передача в функции аргументов по умолчанию.
- •33. Шаблоны функций. Особенности и использования.
- •1. Достоинства, отличительные особенности и сравнительная характеристика языка программирования Си.
- •8. Точка входа в программу.
- •9. Создание файла проекта. Заголовочные файлы и файлы реализации. Законы видимости идентификаторов.
- •Назначение
- •10. Создание файла проекта. Объектные файлы. Раздельная компиляция. Make-файлы.
- •11. Оптимизация кода – алгоритмы, методы и приемы программирования.
- •12. Этапы сборки приложения с использованием компилятора gcc в среде разработки Linux / qt Creator.
- •13. Особенности сборки программы в среде разработки qt-Creator.
- •14. Контроль ошибок в процессе сборки программы: ошибки сборки, ошибки компиляции, утечки памяти, выход за границы,…
- •Пример использования
- •15. Интеграция программ. Использование ассемблерных вставок, вставок для мк. Си-код для гаджетов.
- •16. Особенности использования, преимущества и недостатки кроссплатформенной среды разработки qt creator.
- •17. Особенности использования, преимущества и недостатки компилятора gcc.
- •18. Основные принципы и подходы технологии событийного программирования.
- •19. Особенности среды визуального программир
- •Модель программирования Windows Forms
- •Приложение "Hello World" с Windows Forms
- •20.Управляемый код и данные. Особенности создания приложений в среде Framework .Net - единый каркас среды разработки
- •__Gc arrays
- •__Value
- •Интерфейсы
10. Создание файла проекта. Объектные файлы. Раздельная компиляция. Make-файлы.
Раздельная компиляция — трансляция частей программы по отдельности с последующим объединением их компоновщиком в единый загрузочный модуль.
Исторически особенностью компилятора, отражённой в его названии, являлось то, что он производил как трансляцию, так и компоновку, при этом компилятор мог порождать сразу абсолютный код. Однако позже, с ростом сложности и размера программ (и увеличением времени, затрачиваемого на перекомпиляцию), возникла необходимость разделять программы на части и выделять библиотеки, которые можно компилировать независимо друг от друга. При трансляции каждой части программы компилятор порождает объектный модуль, содержащий дополнительную информацию, которая потом, при компоновке частей в исполнимый модуль, используется для связывания и разрешения ссылок между частями.
Объе́ктный мо́дуль— файл с промежуточным представлением отдельного модуля программы, полученный в результате обработки исходного кода компилятором. Объектный файл содержит в себе особым образом подготовленный код (часто называемый бинарным), который может быть объединён с другими объектными файлами при помощи редактора связей (компоновщика) для получения готового исполнимого модуля, либо библиотеки.
Объектные файлы представляют собой блоки машинного кода и данных, с неопределенными адресами ссылок на данные и процедуры в других объектных модулях, а также список своих процедур и данных. Компоновщик собирает код и данные каждого объектного модуля в итоговую программу, вычисляет и заполняет адреса перекрестных ссылок между модулями. Связывание со статическими библиотеками выполняется редактором связей или компоновщиком (который может представлять собой отдельную программу или быть частью компилятора), а с операционной системой и динамическими библиотеками связывание выполняется при исполнении программы после ее загрузки в память.
Рассмотрим простейший файл проекта типа .pro, используемый qmake и qt creator.
Содержимое файла:
CONFIG += qt debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
CONFIG, HEADERS, SOURCES - переменные.
В файле проекта переменные используются для хранения списков строк. В простых проектах эти переменные информируют qmake о параметрах настройки, именах файлов и каталогах, которые используются в процессе сборки.
Список наиболее важных переменных:
CONFIG Общие параметры настройки проекта.
DESTDIR Каталог, в который будет помещен исполняемый или бинарный файл.
FORMS Список .ui файлов, которые обработаны uic.
HEADERS Список имен заголовочных файлов (.h), используемых при сборке проекта.
QT Qt-ориентированные параметры конфигурации.
SOURCES Список файлов с исходным кодом, которые используются при сборке проекта.
TEMPLATE Шаблон, используемый в проекте. Он определяет, что будет на выходе процесса сборки: приложение, библиотека или подключаемый модуль.
Присваивание переменной значения: HEADERS = mainwindow.h paintwidget.h
Добавление строки в переменную: HEADERS + = mainwindow.h
Qmake создает Makefile на основе файла проекта .pro, который в дальнейшем используется утилитой make.
make — утилита, автоматизирующая процесс преобразования файлов из одной формы в другую. Чаще всего это компиляция исходного кода в объектные файлы и последующая компоновка в исполняемые файлы или библиотеки.
Утилита использует специальные make-файлы, в которых указаны зависимости файлов друг от друга и правила для их удовлетворения. На основе информации о времени последнего изменения каждого файла make определяет и запускает необходимые программы.
Структура Makefile:
Описание
Простой make-файл состоит из правил следующего вида:
цель [цель2 … цельN]: зависимость [зависимость2 … зависимостьN]
команда
[команда2]
…
[командаN]
Цель обычно представляет собой имя файла, генерируемого программой make; примерами
целей являются исполняемые или объектные файлы. Цель может также быть именем
выполняемого действия, как, например, clean.
Зависимость – это файл, используемый как вход для порождения цели. Часто цель зависит от нескольких файлов.
Команда – это действие, выполняемое утилитой make. Правило может иметь более чем одну команду, каждую на своей собственной строке. Внимание: каждая строка, содержащая команду, должна начинаться с символа табуляции. Обычно команда употребляется в правиле с зависимостями и служит для создания целевого
файла, если какая-либо из зависимостей изменилась.
Пример простейшего make-файла:
main.o: main.cpp
g++ -c main.cpp
Он содержит правило для make, указывающее на необходимость вызова компиляции файла main.cpp в файл main.o при изменении файла main.cpp.
Правило, в котором цель зависит от нескольких файлов:
10_Make_Qt: main.o numerical.o text_statistics.o
g++ main.o numerical.o text_statistics.o -o 10_Make_Qt
Когда цель является файлом, этот файл должен быть перекомпилирован или перекомпонован, если изменилась любая из его зависимостей. Кроме того, любые зависимости, которые
автоматически генерируются, должны обновляться первыми. В этом примере 10_Make_Qt
зависит от каждого из 3 объектных файлов; объектный файл numerical.o зависит от исходного файла numerical.cpp и заголовочного файла numerical.h. Перед тем как вызовом компоновки (команда цели 10_Make_Qt) будет скомпилированы все файлы, которые изменились споследней компиляции.
Создание библиотек пользователя.
