- •6) Сколько места в памяти занимает тип double?
- •7) Сколько места в памяти занимает тип int?
- •9)Сколько места в памяти занимает тип char?
- •17. Как производится подключение файлов описаний с помощью директив препроцессора?
- •18. Как производится объявление констант в директивах препроцессора?
- •23. Что такое «область видимости переменной»?
17. Как производится подключение файлов описаний с помощью директив препроцессора?
Директива #include
|
#include </*имя заголовочного файла*/> |
Директива #include вставляет код из указанного файла в текущий файл, то есть, просто подключив другой файл, мы можем пользоваться его функциями, классами, переменными. Заголовочные файлы обычно находятся либо в текущей директории, либо в стандартном системном каталоге.
Подключение заголовочных файлов выполняется во время компиляции, либо как файл, который является частью вашего проекта. Эта функция зависит от конкретной реализации вашего компилятора, поэтому для получения более подробной информации, нужно смотреть настройки своего компилятора.
Если подключаемый файл не найден, процесс компиляции завершается с ошибкой.
Директива #include включает в программу содержимое указанного файла. Когда препроцессор распознает директиву #include, то он ищет следующее за ней имя файла и включает его в текущий файл для последующей компиляции. Имя файла может быть указано двумя способами:
#include<some_file.h>
#include "my_file.h"
Угловые скобки сообщают препроцессору, что файл следует искать в одном или нескольких стандартных системных каталогах (Способ определения этих мест сильно различается для разных платформ и реализаций.). Кавычки говорят о том, что сначала нужно смотреть в рабочем каталоге пользователя, а затем искать в стандартных местах.
Иногда бывает трудно понять, какие же конкретно заголовочные файлы включены в данный исходный текст, и некоторые заголовочные файлы могут оказаться включенными несколько раз. Избежать этого позволяют условные директивы препроцессора.
Условная директива #ifndef (ifnotdefined) проверяет, не было ли какое-либо значение определено ранее. Препроцессор обрабатывает следующие строки вплоть до директивы #endif. В противном случае он пропускает строки от #ifndef до #endif..
Директива #include широко используется для включения в программу так называемых заголовочных файлов, содержащих прототипы библиотечных функций, и поэтому большинство программ на СИ начинаются с этой директивы.
18. Как производится объявление констант в директивах препроцессора?
Директива #define
Директива #define принимает две формы:
определение констант;
определение макросов.
Определение констант
1 |
#define nameToken value |
При использовании имени константы — nameToken, оно будет заменено значением value, то есть, грубо говоря — это та же самая переменная, значение которой изменить нельзя. Смотрим пример использования константы:
1 2 3 4 5 6 7 8 9 |
#include <iostream>
#define TEXT "Марс" // определение константы
int main() { std::cout << TEXT; return 0; } |
Как видите, для доступа к значению константы, просто используем её имя.
Определение параметризованных макросов
1 |
#define nameMacros(arg1, arg2, ... ) expression |
К примеру определим макрос, который будет возвращать максимальное из двух значений.
1 |
#define MAX(num1, num2) ((num1) > (num2) ? (num1) : (num2)) |
Внимание, для определения многострочного макроса, в каждой строке, в конце, должен ставиться символ \, что сообщает препроцессору, что макрос еще не завершен.
Директива
#define BOOKSTORE_H
определяет константу препроцессора BOOKSTORE_H.
Поместив эту директиву
непосредственно после директивы #ifndef, мы можем гарантировать, что
содержательная часть заголовочного файла bookstore.h будет включена в исходный
текст только один раз, сколько бы раз ни включался в текст сам этот файл.
Есть константы, которые автоматически определяются компилятором. Например, мы
можем узнать, компилируем ли мы С++ или С программу. Для С++ программы
автоматически определяется константа __cplusplus (два подчеркивания). Для
стандартного С определяется __STDC__.
Естественно, обе константы не могут быть определены одновременно. Другими полезными предопределенными константами (в данном случае лучше сказать переменными) препроцессора являются __LINE__ и __FILE__. Переменная __LINE__ содержит номер текущей компилируемой строки, а __FILE__ – имя компилируемого файла. Две константы __DATE__ и __TIME__ содержат дату и время компиляции.
19.
Каков формат объявления функций в языке
С++?
Функция — это именованная последовательность описаний и операторов, выполняющая какое-либо законченное действие (или это операция, определенная пользователем).
Функция может принимать параметры (параметры передаются двумя способами: по значению (стоит по умолчанию) и по ссылке) и возвращать значение. В общем случае она задается своим именем.
Список параметров, которые необходимо передать в функцию, заключаются в круглые скобки. Результатом функции может быть значение, которое называют возвращаемым. Об отсутствии возвращаемого значения сообщают ключевым словом void.
Действия, которые производит функция, составляют ее тело; оно заключено в фигурные скобки. Тип возвращаемого значения, ее имя, список параметров и тело составляют определение функции:
[ класс] тип имя ([список_параметров]) [throw (исключения)]
{
тело функции
}
Функция должна быть объявлена до момента ее вызова, попытка использовать необъявленное имя приводит к ошибке компиляции.
Объявление функции называется прототипом, содержит имя функции, тип возвращаемого функцией значения и количество, и тип её параметров.
Если список параметров пуст, круглые скобки после имени функции должны быть указаны.
C++ поддерживает локальные константы и локальные данные различных типов. Все эти элементы могут быть объявлены во вложенных блоках операторов, однако C++ не поддерживает вложенных функций.
Ключевое слово return передает в вызывающую функцию возвращаемое значение, если оно существует.
Обычно объявленная функция является глобальной, т.е. она доступна всем другим функциям. Если объявить прототип функции в той, из которой она вызывается, то прототип будет скрыт от других функций.
20. Какие типы подпрограмм имеются в языке С++?
При решении новых задач можно попытаться воспользоваться ранее написанными программами. Алгоритм, ранее разработанный и целиком используемый в составе других алгоритмов, называется вспомогательным. Применение вспомогательных алгоритмов позволяет разбить задачу на части, структурировать ее.
Вся программа условно может быть разделена на две части: основную и вспомогательную. В основной части производится простейшая обработка информации, организуется обращение к разным вспомогательным модулям (подпрограммам).
Вспомогательный алгоритм тоже может вызывать другие вспомогательные, длина такой цепочки вызовов теоретически не ограничена. Здесь и далее следующие пары слов используются как синонимы: алгоритм и программа, вспомогательный алгоритм и подпрограмма, команда и оператор, программа и модуль. Вспомогательными и основными алгоритмы являются не сами по себе, а по отношению друг к другу.
При использовании вспомогательных алгоритмов необходимо учитывать способ передачи значений исходных данных для них и получения результата от них. Аргументы вспомогательного алгоритма — это переменные, в которых должны быть помещены исходные данные для решения соответствующей подзадачи. Результаты вспомогательного алгоритма — это также переменные, где содержаться результаты решения этих подзадач, а также результатом может быть конкретное действие, которое совершает компьютер под действием подпрограммы.
Подпрограммы могут быть двух видов: подпрограмма без параметров и подпрограмма с параметрами. Обращение к подпрограмме может быть организовано из любого места основной программы или другой подпрограммы сколько угодно раз.
При работе с подпрограммами важными являются понятия формальных и фактических параметров. Формальные параметры — это идентификаторы входных данных для подпрограммы. Если формальные параметры получают конкретные значения, то они называются фактическими. Формальные параметры могут получить конкретные значения только в той программе, где производится обращение к данному модулю-подпрограмме. Тип и порядок записи фактических параметров должны быть такими же, как и формальных параметров. В противном случае результат работы программы будет непредсказуемым. Из этого следует, что фактические параметры используются при обращении к подпрограмме из основной, а формальные параметры — только в самом модуле.
Подпрограмма с параметрами используется для записи многократно повторяющихся действий при разных исходных данных.
При составлении подпрограмм с параметрами надо соблюдать следующие правила:
1) каждая подпрограмма имеет свое имя и список формальных параметров;
2) процедура из основной программы вызывается командой вызова, которая по форме ничем не отличается от вызова команды исполнителя. Результат присваивается одной или нескольким переменным, которые находятся в списке формальных параметров. Но результатом могут быть, конечно, не только значения переменных, но какое либо действие, выполненное ЭВМ.
Подпрограммой называется именованная группа операторов, решающая какую-то конкретную задачу, эту подпрограмму можно запустить, вызвав по имени, любое количество раз из различных мест программы.
Вызовом подпрограммы называется обращение к ней по имени с целью её использования. Вызов — это запуск подпрограммы.
Подпрограмма может, как просто выполнять какие-то действия (например, выводить массив на экран), так и возвращать конкретный результат в виде некоторого значения (например, вычислять среднее арифметическое массива и возвращать получившееся число). Подпрограммы первого типа названы процедурами, а второго — функциями (это похоже на функции в математике, у которых для нескольких аргументов тоже вычисляется единственное значение).
В C++ все подпрограммы называются функциями, но они могут быть двух типов: возвращающими или не возвращающими значение.
21. Каковы правила объявления локальных переменных в языке С++?
Переменная — это именованный участок памяти, в котором хранится значение, которое может быть изменено программой. Все переменные перед их использованием должны быть объявлены.
Общая форма объявления[1] имеет такой вид:
тип список_переменных;
Здесь тип означает один из базовых или объявленных программистом типов (если необходимо — с одним или несколькими спецификаторами), а список_переменных состоит из одного или более идентификаторов, разделенных запятыми. Ниже приведены примеры объявлений:
int i,j,l;
short int si;
unsigned int ui;
double balance, profit, loss;
Объявление переменных может быть расположено в трех местах: внутри функции, в определении параметров функции и вне всех функций. Это - места объявлений соответсвенно локальных, формальных параметров функций и глобальных переменных.
Локальная переменная представляет собой переменную, определенную внутри функции. Такая переменная называется локальной, потому что ее известность ограничена данной функцией. Вы объявляете локальные переменные в начале функции после открывающей фигурной скобки: void some_function(void) { int count; float result; }
При объявлении локальных переменных внутри функции очень вероятно, что имя локальной переменной, объявляемой вами в одной функции, будет таким же, как и имя переменной, используемой в другой функции. Как уже упоминалось, локальные переменные известны только в текущей функции. Таким образом, если две функции используют одно и то же имя для своих локальных переменных, это не приводит к конфликту. C++ трактует имя каждой переменной как локальное по отношению к соответствующей функции. Следующая программа LCLNAME.CPP использует функцию add_values для сложения двух целочисленных значений. Эта функция присваивает свой результат локальной переменной value. Однако в main один из параметров, передаваемых в функцию, также носит имя value.
Правила объявления:
1. Локальные переменные представляют собой переменные, объявленные внутри функции. 2. Локальные переменные известны только той функции, внутри которой они объявлены. 3. Несколько функций могут использовать одно и то же имя для локальной переменной без каких-либо конфликтов.
4.Объявлять локальные переменные в начале вашей функции сразу же после первой открывающей фигурной скобки.
5. При объявлении локальной переменной внутри функции ее можно инициализировать с помощью оператора присваивания.
22. Каковы правила объявления глобальных переменных в языке С++?
В отличие от локальных, глобальные переменные видимы и могут использоваться в любом месте программы. Они сохраняют свое значение на протяжении всей работы программы. Чтобы создать глобальную переменную, ее необходимо объявить за пределами функции. Глобальная переменная может быть использована в любом выражении, независимо от того, в каком блоке это выражение используется.
Глобальные переменные хранятся в отдельной фиксированной области памяти, созданной компилятором специально для этого. Глобальные переменные используются в тех случаях, когда разные функции программы используют одни и те же данные. Однако рекомендуется избегать излишнего использования глобальных переменных, потому что они занимают память в течение всего времени выполнения программы, а не только тогда, когда они необходимы. Кроме того, и это еще более важно, использование глобальной переменной делает функцию менее универсальной, потому что в этом случае функция использует нечто, определенное вне ее. К тому же большое количество глобальных переменных легко приводит к ошибкам в программе из-за нежелательных побочных эффектов. При увеличении размера программы серьезной проблемой становится случайное изменение значения переменной где-то в другой части программы, а когда глобальных переменных много, предотвратить это очень трудно.
Правила объявления:
1. Глобальная переменная представляет собой переменную, чье имя и значение известны на протяжении всей программы. 2. Чтобы объявить глобальную переменную, объявите переменную в начале вашего исходного файла вне какой-либо функции. 3. Поскольку глобальные переменные могут быть легко изменены любой функцией, они привносят возможность появления трудно обнаруживаемых ошибок, поэтому избегайте использования глобальных переменных в своих программах
