Исходные файлы
Часть раздела Объектно-ориентированное программирование путешествия по C на Coddy. Урок 3 из 61.
До сих пор мы размещали объявления функций в заголовочных файлах, но сам код функций (определения) находился в главном файле. Следующий шаг в модульном программировании — перенести эти определения в отдельные файлы исходного кода (файлы .c).
Это создаёт чёткую структуру из трёх частей: заголовочный файл объявляет функции, отдельный файл исходного кода определяет их, а main просто использует их. Вот как это выглядит:
// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
int add(int a, int b);
#endif
// math_utils.c
#include "math_utils.h"
int add(int a, int b) {
return a + b;
}
// main.c
#include <stdio.h>
#include "math_utils.h"
int main() {
printf("%d\n", add(5, 3));
return 0;
}
Обратите внимание, что math_utils.c включает собственный заголовочный файл. Это гарантирует, что определение функции соответствует объявлению: если они не совпадают, компилятор обнаружит ошибку. Основному файлу достаточно включить заголовочный файл, чтобы использовать функцию; ему не нужно знать, как add работает внутри.
Такое разделение скрывает детали реализации и позволяет изменять логику функций, не затрагивая файлы, в которых используются эти функции.
Задание
ЛегкоДавай создадим простую математическую утилиту, организовав код в правильную структуру из трёх файлов: заголовочный файл с объявлениями, исходный файл с реализациями и главный файл, который их использует.
Ты создашь три файла:
math_ops.h: заголовочный файл с объявлениями двух функций для операций:multiplyиsubtract. Обе функции принимают два целых числа и возвращают целое число. Не забудь добавить защиту от повторного включения с помощью символаMATH_OPS_H.math_ops.c: исходный файл с реализациями функцийmultiplyиsubtract. В этом файле следует подключить соответствующий заголовочный файл, чтобы объявления совпадали с определениями.main.c: главный файл, который подключает заголовочный файл и использует обе функции для выполнения вычислений.
Функция multiply должна возвращать произведение двух целых чисел, а subtract — результат вычитания второго целого числа из первого.
На вход будут поданы два целых числа: a и b.
В главной функции выведи результаты обеих операций, каждый на отдельной строке:
Product: {result of multiply}
Difference: {result of subtract}Например, при входных данных 8 и 3 вывод будет таким:
Product: 24
Difference: 5Попробуйте сами
#include <stdio.h>
#include "math_ops.h"
int main() {
int a, b;
scanf("%d", &a);
scanf("%d", &b);
// TODO: Вызовите функцию multiply с a и b и сохраните результат
// TODO: Вызовите функцию subtract с a и b и сохраните результат
// TODO: Выведите результаты в формате:
// Произведение: {результат multiply}
// Разность: {результат subtract}
return 0;
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы модульного программирования
Заголовочные файлыСтражи включенияИсходные файлыСтатические функцииПовторение: Модульный калькулятор4Инкапсуляция
Концепция непрозрачных указателейОпределение непрозрачных структурГеттеры и сеттерыВалидация в сеттерахИтоги: Секретный ящик2Объекты и методы
Структуры как объектыУказатель 'Self'Константная корректностьУказатель против значенияВспомогательные методыИтоги: Point Manager5Проект: Простой банковский счет
Настройка проектаРеализация счета3Жизненный цикл объекта
Паттерн «Конструктор»Паттерн «Деструктор»Инициализация в стекеГлубокое копированиеПовторение: String Wrapper6Наследование через композицию
Встраивание структурПравило первого элементаДоступ к элементам родителяUpcastingПовторение: Иерархия фигур9Проект: Рисование фигур
Обзор проектаРеализация кругаРеализация прямоугольникаПолиморфное использованиеКонтейнер фигурПотренируйтесь самостоятельно: Онлайн-компилятор C