Menu
Coddy logo textTech

Исходные файлы

Часть раздела Object Oriented Programming путешествия по 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 работает внутри.

Это разделение скрывает детали реализации и позволяет изменять логику функций, не затрагивая файлы, которые используют эти функции.

challenge icon

Задание

Легко

Давайте создадим простую математическую утилиту, организовав ваш код в правильную трехфайловую структуру: заголовочный файл для объявлений, исходный файл для реализаций и основной файл, который их использует.

Вы создадите три файла:

  • math_ops.h: Ваш заголовочный файл, содержащий объявления функций для двух операций: multiply и subtract. Обе функции принимают два целых числа и возвращают целое число. Не забудьте включить защиту от повторного включения (guards), используя символ MATH_OPS_H.
  • math_ops.c: Ваш исходный файл, содержащий фактическую реализацию функций multiply и subtract. Этот файл должен включать собственный заголовочный файл, чтобы гарантировать соответствие объявлений определениям.
  • main.c: Ваш основной файл, который включает заголовочный файл и использует обе функции для выполнения вычислений.

Функция multiply должна возвращать произведение двух целых чисел, а subtract должна возвращать разность первого и второго целых чисел.

Вы получите на вход два целых числа: a и b.

В вашей функции main выведите результаты обеих операций на отдельных строках:

Product: {result of multiply}
Difference: {result of subtract}

Например, при входных данных 8 и 3 вывод будет следующим:

Product: 24
Difference: 5

Шпаргалка

Определения функций можно перенести из основного файла в отдельные исходные файлы (файлы .c), создав трехчастную модульную структуру:

  • Заголовочный файл (.h): Содержит объявления функций
  • Исходный файл (.c): Содержит определения функций
  • Основной файл (main.c): Использует функции

Пример структуры:

// 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;
}

Исходный файл (.c) должен включать собственный заголовочный файл, чтобы гарантировать соответствие определения функции её объявлению. Основному файлу достаточно включить только заголовочный файл для использования функций, что позволяет скрыть детали реализации.

Попробуйте сами

#include <stdio.h>
#include "math_ops.h"

int main() {
    int a, b;
    scanf("%d", &a);
    scanf("%d", &b);
    
    // TODO: Вызовите функцию умножения с a и b, сохраните результат
    
    // TODO: Вызовите функцию вычитания с a и b, сохраните результат
    
    // TODO: Выведите результаты в формате:
    // Product: {результат умножения}
    // Difference: {результат вычитания}
    
    return 0;
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Object Oriented Programming