Структура программы C++
Программа на языке С/С++ состоит из:
Общую структуру программы на языке С/С++ можно представить следующим образом:
Директивы препроцессора – определяют действия по преобразованию программы перед компиляцией, а также включают инструкции, которым компилятор следует во время компиляции;
Объявления – описания переменных, функций, структур, классов и типов данных;
Описание функций, выполняемых в проекте. В языке С++ существует только один вид подпрограмм – подпрограмма-функция.
Функция состоит из заголовка и тела функции.
Заголовок состоит из:
где,
тип_результата – это тип того значения, которое функция должна вычислить (если функция не должна возвращать значение, указывается тип void);
имя_функции – имя, с которым можно обращаться к этой функции;
параметры – список её аргументов (может отсутствовать).
Точка с запятой (;) является разделителем между описаниями и операторами.
Препроцессор – это программа, действующая как фильтр на этапе компиляции.
Исходная программа => Препроцессор => Расширенная исходная программа => Компилятор
Перед тем, как попасть на вход компилятора, исходная программа проходит через препроцессор.
Основному тексту программы предшествуют директивы препроцессора (preprocessor directive), которые начинаются с символа решётки #, не являются выражением языка С++ (и потому не заканчивается точкой с запятой).
Команды (директивы) препроцессора представляют собой инструкции, записанные в исходном тексте программы, используемые для того, чтобы облегчить модификацию программ и сделать их независимыми от особенностей различных реализаций компилятора.
Например:
Директивы могут быть записаны в любом месте исходного файла, но их действие распространяется только от точки программы, в которой они записаны, до конца исходного файла.
Файлы, которые появляются в директивах, обычно заканчиваются на .h, что означает файл заголовков (header file). Файлы заголовков содержат объявления констант, переменных и функций, необходимы для работы программы.
Эта директив имеет две формы записи:
В случае, когда имя_включаемого_файла (файла включений) записывается в угловых кавычках, то поиск этого файла осуществляется в стандартных системных каталогах (каталоге подключаемых файлов (include directory), то есть в месте, где компьютерная система хранит все доступные для использования файлы заголовков).
Например:
Если же имя_включаемого_файла указано в кавычках, то сначала поиск осуществляется в текущем каталоге и лишь затем в системных.
Имя_включаемого_файла может также содержать полный путь для его поиска, что наблюдается редко, так как это предполагает жёсткую связь программы с конфигурацией файловой системы конкретной ЭВМ.
Пример:
Удобно использовать для объявления и определения констант, когда одно и то же значение (например, длина массива) используется в разных местах программы.
Например:
В результате препроцессорной обработки получится следующий текст программы:
Изменив значение lin_arr на любое другое только в директиве #define, автоматически изменятся и длина массива, и условие окончания цикла.
Также удобно использовать директиву #define для определения и описания функций (func - функция, выбирающая минимальное из двух чисел):
На экран будет выведено: 4.5
Директива #undef отменяет действие идентификаторов, определенных директивой #define:
Например:
После препроцессорной обработки фрагмент будет иметь вид:
- Директив процессора
- Описаний
- Функций
Общую структуру программы на языке С/С++ можно представить следующим образом:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
директивы препроцессора //1 | |
описание глобальных переменных //2 | |
тип_результата main (параметры) //3 | |
{ | |
тело главной функции | |
} | |
тип_результата F1 (параметры 1) { | |
тело функции F1; | |
} | |
тип_результата F2 (параметры 2) { | |
тело функции F2; | |
} | |
тип_результата FN (параметры N) { | |
тело функции FN; | |
} |
Объявления – описания переменных, функций, структур, классов и типов данных;
Описание функций, выполняемых в проекте. В языке С++ существует только один вид подпрограмм – подпрограмма-функция.
Функция состоит из заголовка и тела функции.
Заголовок состоит из:
- Типа результата, возвращаемого функцией;
- Имени функции;
- Списка параметров, необходимых для выполнения функции.
Тело функции заключается в операторные скобки {}, и содержит описание локальных данных и операторы функции.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
тип_результата имя_функции (параметры) | |
{ | |
описание данных; | |
оператор1; | |
оператор2; | |
оператор3; | |
… | |
операторN; | |
} |
имя_функции – имя, с которым можно обращаться к этой функции;
параметры – список её аргументов (может отсутствовать).
Точка с запятой (;) является разделителем между описаниями и операторами.
Директивы процессора
Понятие препроцессора является одним из ключевых в языке С++.Препроцессор – это программа, действующая как фильтр на этапе компиляции.
Исходная программа => Препроцессор => Расширенная исходная программа => Компилятор
Перед тем, как попасть на вход компилятора, исходная программа проходит через препроцессор.
Основному тексту программы предшествуют директивы препроцессора (preprocessor directive), которые начинаются с символа решётки #, не являются выражением языка С++ (и потому не заканчивается точкой с запятой).
Команды (директивы) препроцессора представляют собой инструкции, записанные в исходном тексте программы, используемые для того, чтобы облегчить модификацию программ и сделать их независимыми от особенностей различных реализаций компилятора.
Например:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <имя_файла> |
Файлы, которые появляются в директивах, обычно заканчиваются на .h, что означает файл заголовков (header file). Файлы заголовков содержат объявления констант, переменных и функций, необходимы для работы программы.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> /*функции стандартного ввода-вывода*/ | |
#include <conio.h> /*функции консольного ввода-вывода*/ | |
#include <math.h> /*стандартные математические функции*/ |
Директива #include
Директива препроцессора #include позволяет включать в текст программы, написанной программистом, тексты других программ.Эта директив имеет две формы записи:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <имя_включаемого_файла> | |
#include “имя_включаемого_файла” |
Например:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> //фрагмент на С | |
или | |
#include <iostream> //фрагмент на С++ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include “file2.h” //Файл, содержащий объявления переменных и типов, | |
//созданных программистом и используемых в программе | |
#include “file2.cpp” //Файл, содержащий, например, объявления или описания функций, //используемых в текущем модуле(файле) |
Пример:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> /* функции стандартного ввода-вывода */ | |
#include <conio.h /* функции консольного ввода-вывода */ | |
#include <math.h>/* стандартные математические функции */ | |
#include <iostream> // потоковый ввод/вывод |
Директивы #define, #undef
Директива препроцессора #define позволяет заменять все вхождения указанного идентификатора какой-то определенной последовательностью символов.Удобно использовать для объявления и определения констант, когда одно и то же значение (например, длина массива) используется в разных местах программы.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define идентификатор последовательность символов |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define lin_arr 40 | |
void main(void) { | |
int arr[lin_arr], i; | |
… | |
for (i=0; i<lin_arr; i++) | |
arr[i]=i+1; | |
… | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void main(void) | |
{ | |
int arr[40], i; | |
for (i=0; i<40; i++) | |
arr[i]=i+1; | |
… | |
} |
Также удобно использовать директиву #define для определения и описания функций (func - функция, выбирающая минимальное из двух чисел):
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Фрагмент на С */ // Изменения на C++ | |
#include <stdio.h> //#include <iostream> | |
#define func(a,b) a<b ? a : b | |
void main(void) | |
{ | |
. . . | |
printf("%f",func(9,4.5)); //cout<<func(9,4.5); | |
} |
Директива #undef отменяет действие идентификаторов, определенных директивой #define:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#undef идентификатор |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define s d | |
… | |
s = 10; | |
… | |
#undef s | |
… | |
s = 5; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
… | |
d=10; | |
… | |
s = 5; | |
… |
Комментарии
Отправить комментарий