From 85d24e586d6d8444ebaf1958fa2a7f0f6814f5c1 Mon Sep 17 00:00:00 2001 From: "Ivan I. Ovchinnikov" Date: Wed, 25 Aug 2021 08:42:08 +0300 Subject: [PATCH] functions ready to be reviewed --- build/main.pdf | Bin 336939 -> 340397 bytes main.tex | 166 +------------------------------------- sections/07-functions.tex | 155 +++++++++++++++++++++++++++++++++++ 3 files changed, 157 insertions(+), 164 deletions(-) create mode 100644 sections/07-functions.tex diff --git a/build/main.pdf b/build/main.pdf index 18c5313b19470b1cc091534ced768ae2cc535871..02d8e61493c9e8e889fd3511334f7f4c83c5223b 100644 GIT binary patch delta 40150 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 diff --git a/main.tex b/main.tex index 0edded2..550a01b 100644 --- a/main.tex +++ b/main.tex @@ -21,171 +21,9 @@ \import{sections/}{05-conditions} % 06 cycles \import{sections/}{06-cycles} +% 07 functions +\import{sections/}{07-functions} -\section{Функции} -\subsection{Понятие функции, параметры и аргументы} -Функция - это такая обособленная часть кода, которую можно выполнять любое количество раз. У функций обязательно в таком порядке должны быть описаны: тип возвращаемого значения, название, параметры и так называемое тело, т есть собственно исполняемый код. Рассмотрим более детально функцию \code{int main (int argc, char *argv[])}: \code{int} - это \textit{тип возвращаемого значения}, то есть на том месте, откуда будет вызвана эта функция, в результате её работы по выполнении оператора \code{return;}, появится некое целое число. Возвращаемые значения могут быть любых типов. В случае же когда функция не должна возвращать результат своей работы, или никакого возвращаемого результата не предполагается, указывается ключевое слово \code{void} (англ. - пустота). То есть на месте вызова функции, в результате её выполнения, не появится никакого значения (обычно, таким значением бывает rvalue). Оператор \code{return;} обязателен для не-void функций, а в \code{void} функциях может присутствовать или нет, но никогда не содержит возвращаемого значения. \code{main} - это \textit{название функции}. Функция именно с таким названием, написанным с маленькой буквы, всегда является точкой входа в программу (\hyperref[text:main]{\ref{text:main}}). Операционная система ищет именно эту функцию, когда получает команду на выполнение программы. -\frm{Названия функций в рамках одной программы не должны повторяться и не должны начинаться с цифр или спецсимволов, также, как и названия переменных (см стр. \hyperref[text:naming]{\pageref{text:naming}}) никаких других ограничений на название функций не накладывается.} -Конструкция в круглых скобках \code{(int argc, char *argv[])} - это \textit{параметры функции}. Параметры функции - это такие переменные, которые создаются при вызове функции и существуют только внутри неё. С их помощью можно передать в функцию какие-то аргументы и исходные данные для работы. Параметры пишутся в круглых скобках сразу после названия функции. В случае если функция не принимает параметров необходимо поставить после названия пустые круглые скобки (\code{()}). Весь код, содержащийся в фигурных скобках после параметров функции называется \textit{телом функции}. Это те операторы и команды, которые будут последовательно выполнены при вызове функции. В теле функции мы можем \textbf{вызывать} другие функции, но \textbf{никогда не можем объявлять, описывать или создавать в теле функции другие функции}. Никаких других ограничений на написание тела функции язык не накладывает. Таким образом, общий вид функции имеет следующий вид: - -\begin{figure}[h!] -\begin{verbatim} -ТипВозвращаемогоЗначения Имя (СписокАргументов) -{ - ТелоФункции - return ВозвращаемоеЗначение; -} -\end{verbatim} -\end{figure} -Далее приведём небольшой пример, который призван продемонстрировать, как выглядит простейшее \textit{объявление} и \textit{описпание} функций (function declaration and definition), а также их вызов из функции \code{int main (int argc, char *argv[])}. - -\begin{figure}[h!] - \begin{lstlisting}[language=C,style=CCodeStyle] - void somefunction() { // <-- this is a function - printf("some function\n"); - // some useful things - } - - int anotherFunction() { - printf("another function\n"); - // more useful things happened - return 10; - } - - int main (int argc, const char* argv[]) { - printf("main function\n"); - // more useful things - somefunction(); // <-- this is invocation - int x = anotherFunction(); - printf("x = %d\n", 10); - return 0; - } - \end{lstlisting} -\end{figure} -Так, на шестнадцатой строке кода выше мы видим, что \textbf{вернувшееся} из функции, объявленной на шестой строке целое число \code{10} будет присвоено переменной \code{x} и выведено в терминал семнадцатой строкой. - -\begin{figure}[h!] -\begin{verbatim} -$ ./program -main function -some function -another function -x = 10 -$ -\end{verbatim} -\end{figure} -Функции принято разделять на проверяющие, считающие и выводящие, и каждая из вышеописанных функций не должна нести дополнительной нагрузки. То есть, функция не должна знать откуда в программе появились её параметры, и где будет использован результат её работы. То есть сам язык таких ограничений не накладывает, но такой подход к написанию функций делает их значительно более гибкими и даёт им возможность быть переиспользованными. Без применения такого подхода было бы невозможно писать абстрактные библиотеки и фреймворки. -\frm{\textbf{Параметры функции} - это те переменные, которые указываются в круглых скобках при определении или описании функции. Параметры функции существуют как локальные переменные в кодовом блоке тела функции.\textbf{Аргументы функции} - это те значения переменных или литералов, которые указываются в круглых скобках при выхове функции.} -Для примера опишем функцию, суммирующую два числа. Для простоты, в качестве аргументов она будет принимать целые числа и возвращать целочисленный результат. Обратите внимание что функция не <<знает>> откуда взялись эти числа, мы можем их прочитать из консоли, можем задать в виде констант или получить в результате работы какой-то другой функции. Внутри функции \code{int main (int argc, char *argv[])} программа вызывает нашу функцию \code{sum(int x, int y)} суммирующую два числа и передаём в качестве аргументов эти числа. - -\begin{figure}[h!] - \begin{lstlisting}[language=C,style=CCodeStyle] - int sum(int x, int y) { - int result = x + y; - return result; - } - - int main (int argc, const char* argv[]) { - int a; - scanf("%d", &a); - int x = sum(50, a); - printf("x = %d\n", 10); - return 0; - } - \end{lstlisting} -\end{figure} -Обратите внимание, что в качестве аргументов мы можем передавать константные значения, а также переменные. Значения переменных мы можем получить например из консоли, либо в результате выполнения какой-нибудь другой функции. - -\begin{figure}[h!] -\begin{verbatim} -$ ./program -x = 110 -$ -\end{verbatim} -\end{figure} -Как уже было сказано, параметры - это переменные, которые хранят в себе некоторые начальные значения вызова функции. Параметризация позволяет использовать одни и те же функции с разными исходными данными. Приглядимся повнимательнее к хорошо знакомой нам функции \code{printf();}. Строка, которую мы пишем в круглых скобках в двойных кавычках - это аргумент функции. То есть мы знаем, что функция умеет выводить на экран строки, как именно - нам нет дела, а какие именно строки - мы указываем в качестве аргумента. Функция \code{printf();} примечательна еще и тем, что она может принимать в себя нефиксированное количество аргументов. Описание работы таких функций, а также их написание выходит далеко за пределы основ языка, нам важно помнить что мы можем это использовать. В аргументе функции \code{printf()} мы можем написать заполнитель соответствующего типа и, например, вызвать нашу функцию \code{sum}. -\subsection{Оформление функций. Понятие рефакторинга} -Теперь мы без проблем можем оформить уже существующие у нас программы в виде функций. Например, оформим в виде функции программу проверки простоты числа. Для этого опишем функцию которая возвращает целое число, назовем ее \code{isPrime()}, в качестве параметра она будет принимать целое число, назовем его \code{number}. Найдем в предыдущих разделах (стр. \hyperref[code:isPrime]{\pageref{code:isPrime}}) программу определения простоты числа и скопируем в тело функции. Внесем небольшие правки, уберем вывод так как это будет, можно сказать, классическая проверяющая функция, вывод оставим для функции \code{int main (int argc, char *argv[])}, пусть о наличии у нас терминала <<знает>> только она. -\frm{Такой процесс, перенос участков кода между функциями, выделение участков кода в функции, синтаксические, стилистические и другие улучшения, называетя \textbf{рефакторингом}. Обычно, рефакторингом занимаются сами разработчики в свободное от основной деятельности времени, в периоды код ревью или по необходимости улучшить читаемость/повторяемость собственного кода.} -Следовательно, допишем условия: если делителей два, то число простое, возвращаем \code{ИСТИНУ}, то есть любое ненулевое значение, в нашем примере - единицу. Если же делителей больше – число не простое, возвращаем \code{ЛОЖЬ}, в нашем случае, это ноль. Такой вывод можно записать и другим способом, \code{return (dividers == 2)} – это выражение в случае истины вернет единицу в случае лжи ноль. Или можно воспользоваться тернарным оператором, то есть, написать \code{return (dividers == 2) ? 1 : 0}: если условие в скобках истинно вернется единица, ложно – ноль. Также важно, что выйти из функции мы можем на любом этапе ее выполнения, например если делителей уже три, то нам нужно не завершать цикл, а вернуть \code{ЛОЖЬ} из функции. -\begin{multicols}{2} -\begin{lstlisting}[language=C,style=CCodeStyle] - -int isPrime(int number){ - int dividers = 0, i = 1; - - - while(i <= number){ - if(number % i++ ==0) - dividers++; - else - continue; - - if (dividers == 3) - return 0; - } - return (dividers == 2) -} -\end{lstlisting} -\columnbreak -\begin{lstlisting}[language=C,style=CCodeStyle] -int main(int argc, char *argv[]) { - int number; - int dividers = 0, i = 1; - printf("Enter number: "); - scanf("%d", &number); - while (i <= number) { - if (number++ % i == 0) { - dividers++; - } else { - continue; - } - if (dividers == 3) - break; - } - printf("Number %d is%s prime", - number, - (dividers == 2) ? "" : " not" - ); -} -\end{lstlisting} -\end{multicols} -Немного подправив вывод, внесем в него вызов функции \code{isPrime()} и объявим переменную \code{int num}, которую будем передавать в качестве аргумента в функцию \code{isPrime()}. Запустим нашу программу и убедимся что все работает – число 71 действительно является простым. - -\begin{figure}[h!] - \begin{lstlisting}[language=C,style=CCodeStyle] - int main (int argc, const char* argv[]) { - int num = 71; - printf("Entered number %d is%s prime \n", - number, - isPrime(num) ? "" : " not" - ); - return 0; - } - - \end{lstlisting} -\end{figure} -Теперь мы можем написать программы любой сложности, содержащие функции \code{isPrime()} или \code{sum()}. О том, что мы работаем с консолью, в нашем случае должна знать только функция \code{int main (int argc, char *argv[])}, поэтому ввод значений и вывод на экран мы оставим в ней, а подсчёты, проверки или другие важные действия и алгоритмы положим в функции. Именно это абстрагирование является сильной стороной использования функций, так, например, у нас нет необходимости каждый раз вставлять в программу код взаимодействия с консолью при выводе каждой строки, а можно ограничиться вызовом функции \code{printf();} - -% Пришло время поговорить про прототипы. -% Зачастую возникают ситуации, когда функция не описана до точки входа в программу, или вовсе лежит в другом файле. В этом случае мы должны сообщить компилятору, что такую функцию придётся дополнительно поискать. Для этого необходимо указать всю информацию о функции, кроме её тела. Такой оператор называется прототип функции. -% Опишем прототип функции isPrime, описав сигнатуру этой функции. - - - - - - - - - - - -% int isPrime(int number); -% И пара слов о заголовочных файлах. Заголовочные файлы это мощный инструмент модульной разработки. Мы уже неоднократно видели подключение заголовочного файла stdio.h, давайте посмотрим, что же скрывает и как именно работает эта строка. Обнаружив данный файл на диске мы видим, что в нём содержатся другие подключения библиотек, директивы препроцессора (о которых более подробно мы будем говорить на следующих занятиях) и прототипы функций (например, так часто используемой нами -% printf()). (Где-то вот здесь… на 259 строке) - -% // Здесь показ содержимого stdio.h \section{Указатели} % Коллеги, здравствуйте. Вот и пришла пора поговорить о серьёзном низкоуровневом программировании. О том, от чего стараются оградить программистов языки высокого уровня и современные фреймворки. Об указателях. % На этом уроке мы поговорим о том, что такое указатели и как они соотносятся с остальными переменными, что такое передача аргумента по значению и по ссылке. diff --git a/sections/07-functions.tex b/sections/07-functions.tex new file mode 100644 index 0000000..adea780 --- /dev/null +++ b/sections/07-functions.tex @@ -0,0 +1,155 @@ +\section{Функции} +\subsection{Понятие функции, параметры и аргументы} +Функция - это такая обособленная часть кода, которую можно выполнять любое количество раз. У функций обязательно в таком порядке должны быть описаны: тип возвращаемого значения, название, параметры и так называемое тело, т есть собственно исполняемый код. Рассмотрим более детально функцию \code{int main (int argc, char *argv[])}: \code{int} - это \textit{тип возвращаемого значения}, то есть на том месте, откуда будет вызвана эта функция, в результате её работы по выполнении оператора \code{return;}, появится некое целое число. Возвращаемые значения могут быть любых типов. В случае же когда функция не должна возвращать результат своей работы, или никакого возвращаемого результата не предполагается, указывается ключевое слово \code{void} (англ. - пустота). То есть на месте вызова функции, в результате её выполнения, не появится никакого значения (обычно, таким значением бывает rvalue). Оператор \code{return;} обязателен для не-void функций, а в \code{void} функциях может присутствовать или нет, но никогда не содержит возвращаемого значения. \code{main} - это \textit{название функции}. Функция именно с таким названием, написанным с маленькой буквы, всегда является точкой входа в программу (\hyperref[text:main]{\ref{text:main}}). Операционная система ищет именно эту функцию, когда получает команду на выполнение программы. +\frm{Названия функций в рамках одной программы не должны повторяться и не должны начинаться с цифр или спецсимволов, также, как и названия переменных (см стр. \hyperref[text:naming]{\pageref{text:naming}}) никаких других ограничений на название функций не накладывается.} +Конструкция в круглых скобках \code{(int argc, char *argv[])} - это \textit{параметры функции}. Параметры функции - это такие переменные, которые создаются при вызове функции и существуют только внутри неё. С их помощью можно передать в функцию какие-то аргументы и исходные данные для работы. Параметры пишутся в круглых скобках сразу после названия функции. В случае если функция не принимает параметров необходимо поставить после названия пустые круглые скобки (\code{()}). Весь код, содержащийся в фигурных скобках после параметров функции называется \textit{телом функции}. Это те операторы и команды, которые будут последовательно выполнены при вызове функции. В теле функции мы можем \textbf{вызывать} другие функции, но \textbf{никогда не можем объявлять, описывать или создавать в теле функции другие функции}. Никаких других ограничений на написание тела функции язык не накладывает. Таким образом, общий вид функции имеет следующий вид: + +\begin{figure}[h!] +\begin{verbatim} +ТипВозвращаемогоЗначения Имя (СписокАргументов) +{ + ТелоФункции + return ВозвращаемоеЗначение; +} +\end{verbatim} +\end{figure} +Далее приведём небольшой пример, который призван продемонстрировать, как выглядит простейшее \textit{объявление} и \textit{описпание} функций (function declaration and definition), а также их вызов из функции \code{int main (int argc, char *argv[])}. + +\begin{figure}[h!] + \begin{lstlisting}[language=C,style=CCodeStyle] + void somefunction() { // <-- this is a function + printf("some function\n"); + // some useful things + } + + int anotherFunction() { + printf("another function\n"); + // more useful things happened + return 10; + } + + int main (int argc, const char* argv[]) { + printf("main function\n"); + // more useful things + somefunction(); // <-- this is invocation + int x = anotherFunction(); + printf("x = %d\n", 10); + return 0; + } + \end{lstlisting} +\end{figure} +Так, на шестнадцатой строке кода выше мы видим, что \textbf{вернувшееся} из функции, объявленной на шестой строке целое число \code{10} будет присвоено переменной \code{x} и выведено в терминал семнадцатой строкой. + +\begin{figure}[h!] +\begin{verbatim} +$ ./program +main function +some function +another function +x = 10 +$ +\end{verbatim} +\end{figure} +Функции принято разделять на проверяющие, считающие и выводящие, и каждая из вышеописанных функций не должна нести дополнительной нагрузки. То есть, функция не должна знать откуда в программе появились её параметры, и где будет использован результат её работы. То есть сам язык таких ограничений не накладывает, но такой подход к написанию функций делает их значительно более гибкими и даёт им возможность быть переиспользованными. Без применения такого подхода было бы невозможно писать абстрактные библиотеки и фреймворки. +\frm{\textbf{Параметры функции} - это те переменные, которые указываются в круглых скобках при определении или описании функции. Параметры функции существуют как локальные переменные в кодовом блоке тела функции.\textbf{Аргументы функции} - это те значения переменных или литералов, которые указываются в круглых скобках при выхове функции.} +Для примера опишем функцию, суммирующую два числа. Для простоты, в качестве аргументов она будет принимать целые числа и возвращать целочисленный результат. Обратите внимание что функция не <<знает>> откуда взялись эти числа, мы можем их прочитать из консоли, можем задать в виде констант или получить в результате работы какой-то другой функции. Внутри функции \code{int main (int argc, char *argv[])} программа вызывает нашу функцию \code{sum(int x, int y)} суммирующую два числа и передаём в качестве аргументов эти числа. + +\begin{figure}[h!] + \begin{lstlisting}[language=C,style=CCodeStyle] + int sum(int x, int y) { + int result = x + y; + return result; + } + + int main (int argc, const char* argv[]) { + int a; + scanf("%d", &a); + int x = sum(50, a); + printf("x = %d\n", 10); + return 0; + } + \end{lstlisting} +\end{figure} +Обратите внимание, что в качестве аргументов мы можем передавать константные значения, а также переменные. Значения переменных мы можем получить например из консоли, либо в результате выполнения какой-нибудь другой функции. + +\begin{figure}[h!] +\begin{verbatim} +$ ./program +x = 110 +$ +\end{verbatim} +\end{figure} +Как уже было сказано, параметры - это переменные, которые хранят в себе некоторые начальные значения вызова функции. Параметризация позволяет использовать одни и те же функции с разными исходными данными. Приглядимся повнимательнее к хорошо знакомой нам функции \code{printf();}. Строка, которую мы пишем в круглых скобках в двойных кавычках - это аргумент функции. То есть мы знаем, что функция умеет выводить на экран строки, как именно - нам нет дела, а какие именно строки - мы указываем в качестве аргумента. Функция \code{printf();} примечательна еще и тем, что она может принимать в себя нефиксированное количество аргументов. Описание работы таких функций, а также их написание выходит далеко за пределы основ языка, нам важно помнить что мы можем это использовать. В аргументе функции \code{printf()} мы можем написать заполнитель соответствующего типа и, например, вызвать нашу функцию \code{sum}. +\subsection{Оформление функций. Понятие рефакторинга} +Теперь мы без проблем можем оформить уже существующие у нас программы в виде функций. Например, оформим в виде функции программу проверки простоты числа. Для этого опишем функцию которая возвращает целое число, назовем ее \code{isPrime()}, в качестве параметра она будет принимать целое число, назовем его \code{number}. Найдем в предыдущих разделах (стр. \hyperref[code:isPrime]{\pageref{code:isPrime}}) программу определения простоты числа и скопируем в тело функции. Внесем небольшие правки, уберем вывод так как это будет, можно сказать, классическая проверяющая функция, вывод оставим для функции \code{int main (int argc, char *argv[])}, пусть о наличии у нас терминала <<знает>> только она. +\frm{Такой процесс, перенос участков кода между функциями, выделение участков кода в функции, синтаксические, стилистические и другие улучшения, называетя \textbf{рефакторингом}. Обычно, рефакторингом занимаются сами разработчики в свободное от основной деятельности времени, в периоды код ревью или по необходимости улучшить читаемость/повторяемость собственного кода.} +Следовательно, допишем условия: если делителей два, то число простое, возвращаем \code{ИСТИНУ}, то есть любое ненулевое значение, в нашем примере - единицу. Если же делителей больше – число не простое, возвращаем \code{ЛОЖЬ}, в нашем случае, это ноль. Такой вывод можно записать и другим способом, \code{return (dividers == 2)} – это выражение в случае истины вернет единицу в случае лжи ноль. Или можно воспользоваться тернарным оператором, то есть, написать \code{return (dividers == 2) ? 1 : 0}: если условие в скобках истинно вернется единица, ложно – ноль. Также важно, что выйти из функции мы можем на любом этапе ее выполнения, например если делителей уже три, то нам нужно не завершать цикл, а вернуть \code{ЛОЖЬ} из функции. +\begin{multicols}{2} +\begin{lstlisting}[language=C,style=CCodeStyle] + +int isPrime(int number){ + int dividers = 0, i = 1; + + + while(i <= number){ + if(number % i++ ==0) + dividers++; + else + continue; + + if (dividers == 3) + return 0; + } + return (dividers == 2) +} +\end{lstlisting} +\columnbreak +\begin{lstlisting}[language=C,style=CCodeStyle] +int main(int argc, char *argv[]) { + int number; + int dividers = 0, i = 1; + printf("Enter number: "); + scanf("%d", &number); + while (i <= number) { + if (number++ % i == 0) { + dividers++; + } else { + continue; + } + if (dividers == 3) + break; + } + printf("Number %d is%s prime", + number, + (dividers == 2) ? "" : " not" + ); +} +\end{lstlisting} +\end{multicols} +Немного подправив вывод, внесем в него вызов функции \code{isPrime()} и объявим переменную \code{int num}, которую будем передавать в качестве аргумента в функцию \code{isPrime()}. Запустим нашу программу и убедимся что все работает – число 71 действительно является простым. + +\begin{figure}[h!] + \begin{lstlisting}[language=C,style=CCodeStyle] + int main (int argc, const char* argv[]) { + int num = 71; + printf("Entered number %d is%s prime \n", + number, + isPrime(num) ? "" : " not" + ); + return 0; + } + + \end{lstlisting} +\end{figure} +Теперь мы можем написать программы любой сложности, содержащие функции \code{isPrime()} или \code{sum()}. О том, что мы работаем с консолью, в нашем случае должна знать только функция \code{int main (int argc, char *argv[])}, поэтому ввод значений и вывод на экран мы оставим в ней, а подсчёты, проверки или другие важные действия и алгоритмы положим в функции. Именно это абстрагирование является сильной стороной использования функций, так, например, у нас нет необходимости каждый раз вставлять в программу код взаимодействия с консолью при выводе каждой строки, а можно ограничиться вызовом функции \code{printf();} +\subsection{Прототип функции, заголовочные файлы} +Зачастую возникают ситуации, когда функция не описана до точки входа в программу, или вовсе лежит в другом файле, возможно, даже написанном не нами. В этом случае мы должны сообщить компилятору, что такую функцию придётся дополнительно поискать. Для этого необходимо указать всю информацию о функции, кроме её тела. Такое объявление называется \textbf{прототип или определение функции} (англ. function definition). +\frm{С определением функции тесно связано понятие \textit{сигнатуры} функции. Сигнатура функции для разных языков программирования представляется немного разным составом сведений, так, например, в языке С сигнатура - это тип возвращаемого значения, название функции и порядок типов параметров, например, для функции суммирования чисел, описанной выше, это будет \code{int sum(int, int)}.} +Опишем прототип функции \code{isPrime()}, описав сигнатуру этой функции. Обратите внимание, что допустимо в определении функции также писать названия параметров, а не только их типы, но это необязательно. + +\begin{figure}[h!] +\begin{lstlisting}[language=C,style=CCodeStyle] + int isPrime(int number); +\end{lstlisting} +\end{figure} +Из таких определений часто составляют так называемые \textit{заголовочные файлы}. Заголовочные файлы это мощный инструмент модульной разработки. Мы уже неоднократно видели подключение заголовочного файла \code{stdio.h}, Обнаружив данный файл на диске компьютера, мы увидим, что в нём содержатся другие подключения библиотек, директивы препроцессора (о которых более подробно мы будем говорить на следующих занятиях) и прототипы функций (например, так часто используемой нами \code{printf()}). Заголовочным этот файл называется, потому что его обычно пишут в коде программы в самом верху, и фактически, компилятор просто вставляет его содержимое в текст программы. Расширение файла (\code{.h}) является сокращением от английского слова header, заголовок. Обратите внимание, что подключая заголовочный файл \code{stdio.h} мы получаем вообще всю функциональность стандартного ввода-вывода, то есть, например, работу с файлами, которую можем и не использовать. В стандарте С++20 было принято решение о переходе для поддержки повторяемости кода от заголовочных файлов к целостным модулям, импортируемым отдельно. Это позволяет интегрировать в программу только нужный функционал, игнорируя всю остальную библиотеку. \ No newline at end of file