Вынести функцию в отдельный файл C/C++
![Вынести функцию в отдельный файл C/C++](/content/images/size/w2000/2021/11/zagolovok.png)
Как вынести функцию в отдельный файл?
Для того чтобы вынести функцию в отдельный файл нам понадобится разбить нашу программу на несколько частей.
Обычно это делают так:
- Прототипы функций помещаются в заголовочный файл (.h)
- Реализации (определения) функций помещаются в отдельный .cpp файл
- В файле (с main()), где вызываются функции, подключается файл с прототипами (.h)
Теперь разберем как это сделать на примере.
Допустим у нас есть программа в которой мы запрашиваем X, а на экран должно вывестись X²
#include <stdio.h>
#include <conio.h>
#include <locale.h>
int x;
int main() {
setlocale(0, "Russian");
printf("Введите X\n");
scanf_s("%d", & x); //тут будем вызывать нашу функцию _getch();
return 0;
}
1. Заголовочный файл (.h)
Создаем заголовочный файл и помещаем туда прототип нашей функции:
![Создание заголовочного файла (.h)](https://blog.disonds.com/content/images/2017/02/header.png?resize=770%2C417)
Обязательно используем конструкцию для защиты от множественных включений в один файл:
#ifndef Header_h
#define Header_h
//Код
#endif //Header
Получится:
#ifndef Header_h
#define Header_h
void func(); //прототип функции
#endif //Header
2. Реализация функции (.c/.cpp)
Создаем отдельный .cpp файл (function.cpp):
![Создание отдельного файла под функцию](https://blog.disonds.com/content/images/2017/02/function.png?resize=770%2C534)
Пишем реализацию функции:
#include <stdio.h>
extern int x;
void func() {
printf("X^2 будет: %d", x * x); //тело функции
}
3. Подключение заголовочного файла (.h)
Открываем файл где располагается main(), и подключаем заголовочный файл (.h) в нашем случае Header.h:
#include "Header.h"
Затем вызываем функцию:
func();
Получился вот такой main.cpp:
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include "Header.h"
int x;
int main() {
setlocale(0, "Russian");
printf("Введите X\n");
scanf_s("%d", & x);
func();
_getch();
return 0;
}
Проверяем:
![Проверяем код на работоспособность](https://blog.disonds.com/content/images/2017/02/prov.png?resize=770%2C356)
Вуаля, все работает.