Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРограмирование 1 блок.docx
Скачиваний:
6
Добавлен:
31.07.2019
Размер:
194.07 Кб
Скачать

27. Директива #Define.

Директива #define

Директива #define служит для замены часто использующихся констант, ключевых слов, операторов или выражений некоторыми идентификаторами. Идентификаторы, заменяющие текстовые или числовые константы, называют именованными константами. Идентификаторы, заменяющие фрагменты программ, называют макроопределениями, причем макроопределения могут иметь аргументы.

Директива #define имеет две синтаксические формы:

#define идентификатор текст

#define идентификатор (список параметров) текст

Эта директива заменяет все последующие вхождения идентификатора на текст. Такой процесс называется макроподстановкой. Текст может представлять собой любой фрагмент программы на С, а также может и отсутствовать. В последнем случае все экземпляры идентификатора удаляются из программы.

Пример:

#define WIDTH 80

#define LENGTH (WIDTH+10)

Эти директивы изменят в тексте программы каждое слово WIDTH на число 80, а каждое слово LENGTH на выражение (80+10) вместе с окружающими его скобками.

Скобки, содержащиеся в макроопределении, позволяют избежать недоразумений, связанных с порядком вычисления операций. Например, при отсутствии скобок выражение t=LENGTH*7 будет преобразовано в выражение t=80+10*7, а не в выражение t=(80+10)*7, как это получается при наличии скобок, и в результате получится 780, а не 630.

Во второй синтаксической форме в директиве #define имеется список формальных параметров, который может содержать один или несколько идентификаторов, разделенных запятыми. Формальные параметры в тексте макроопределения отмечают позиции на которые должны быть подставлены фактические аргументы макровызова. Каждый формальный параметр может появиться в тексте макроопределения несколько раз.

При макровызове вслед за идентификатором записывается список фактических аргументов, количество которых должно совпадать с количеством формальных параметров.

Пример:

#define MAX(x,y) ((x)>(y))?(x):(y)

Эта директива заменит фрагмент

t=MAX(i,s[i]);

на фрагмент

t=((i)>(s[i])?(i):(s[i]);

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

Например, при наличии скобок фрагмент

t=MAX(i&j,s[i]||j);

будет заменен на фрагмент

t=((i&j)>(s[i]||j)?(i&j):(s[i]||j);

а при отсутствии скобок - на фрагмент

t=(i&j>s[i]||j)?i&j:s[i]||j;

в котором условное выражение вычисляется в совершенно другом порядке.

29.

  • Любая функция, если она не объявлена как void, должна возвращать значение.

  • Это значение задается в инструкции return выражение; - инициализации неименованной переменной возвращаемого типа.

  • Функция может иметь несколько инструкций return.

  • Если функция не возвращает значения, то выражение в инструкции return может быть пустым или вызовом функции типа void.

30. В С++ точка с запятой является признаком конца оператора.

Пустой оператор

Пустой оператор состоит из ;

Пустой оператор используется там, где по правилам языка должен находиться какой-либо оператор, а по логике программы там ничего выполнять не надо.

Оператор-выражение

Любое выражение, за которым следует ; , является оператором. Такой оператор называется оператор-выражение.

Примеры:

i ++;

a = b+c;

c + = (a < b)? a:b;

x+y; // Здесь результат не используется

// и будет выдано предупреждение.

Составной оператор

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

{i=5; c=sin(i*x); c++;} // Это блок.

Объявления

В С++ объявления являются операторами языка и могут стоять там, где возможен любой другой оператор С++:

s = 0.3; d/=s; int k = 5;

d = s+2*k;

double f=s+d; f*=k;