Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры ТП!!.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
458.75 Кб
Скачать

1. Структура программы на языке С++.

Программа на С++ состоит из трех основных блоков.

1 блок: блок директив препроцессора – содержит набор строк, начинающихся с символа # и обеспечивающих предварительную подготовку файла перед компиляцией

2 блок: блок объявлений - содержит определение глобальных переменных, а также тел функций.

3 блок: основной блок программы или основная функция main.

В С++ определены следующие типы данных:

  1. Скалярные типы данных:

    • арифметические или основные (целые и плавающие);

    • указатели.

  2. Составные типы (массивы, структуры, перечисления, смеси).

Скалярные арифметические:

  • целочисленные:

char, int, short, long.

сhar –занимает 1 байт от –128 до 128

int – занимает min – 2 байта, max – тип процессора

short – 2 байта

long – 4 байта

В Си есть понятие беззнаковое целое число (т.е. нулевой бит интерпретируется, как часть числа; добавляется unsigned) и целое число со знаком.

вещественные, плавающие:

float – 4 байта, 1 бит - знаковый, байт - порядок, 23 бита – мантисса

double – 8 байт, 1 бит – знаковый, 11 бит – порядок, 52 бита – мантисса

longdouble – 10 байт – распределение аналогичное double

double = longfloat

void – неопределенный тип, позволяет отложить спецификацию типа до момента применения переменной в программе.

Указатели – это адрес памяти, выделенный для переменной или функции. Формат определения указателей:

Спецификатор типа * [модификатор] идентификатор;

Спецификатор типа задает тип объекта из числа основных структур или смесей.

Указатель типа void естественно может указывать на переменную любого типа.

Модификатор - это необязательный параметр, который может быть равен сonst, far, near, huge. Определяет размер переменной в зависимости от модели памяти, для которой компилируется программа. int * x;

Составные типы.

Массив:

Спецификатор типа описатель [количественная величина] идентификатор;

Спецификатор типа задает тип переменной.

Описатель задает имя переменной.

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

если при объявлении массив инициализируется ,

если массив объявлен, как формальный параметр,

если массив объявлен, как ссылка на массив явно определенный в другом файле.

Нумерация в массиве начинается с нуля.

Перечисления.

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

Enum day {Mon, Tue, Wen,…} day_of_week;

Структуры применяются для объединения разных типов.

Struct [<имя поля>] {<тип> <имя поля>[,} переменные

Смеси – это тип данных, хранить в одной и той же памяти значения разных типов, но не одновременно. Для описания смеси используется следующая синтаксическая структура:

Union[<имя.типа.смеси>]

{<тип>.<имя поля>[,..;]}

  1. Препроцессор. Директивы препроцессора.

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

  1. # include «имя файла.»

  2. # include <имя файла>

В 1- м случае файл ищется в рабочем каталоге, а во 2-м в каталоге, определенном средой программирования. Данная директива позволяет включить в исходный файл содержимое другого файла.

1.define имя макро <тело>

2.define имя макро (формирование аргумента) <тело>

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

# define Pi 3.14156

Макроподстановка чувствительна к последовательности выполнения операций, т.к. тело макро рассматривается как некоторое строчное выражение

# define Mul(a,b) (a)*(b)

c=Mul(x+3, y-2) -> (x+3)*(y-2)

При использовании директивы define можно использовать директиву отмены текущего макроса с текущей точки программы. Для этого используется директива #undef .

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

Директива условной компиляции состоит из набора директив.

#ifdef - определяет условие выполнения компиляции (условие – идентификатор, являющийся константой)

# elif – позволяет задать альтернативный идентификатор, который также целая константа.

# else – определяет альтернативную ветвь предыдущего условия.

# endif – завершает блок условной компиляции.

# операция образования строки

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

#define stroka(x) printf(#x”\n”)

stroka(‘Данные о продажах’)

* Директива формирования сообщения об ошибке

#error сообщение

Директива error позволяет направить в стандартный поток ошибок сообщения, указанные в теле директивы. Используется для управления процессом компиляции на этапе отладки. После вывода сообщения компиляция прекращается, строка сообщения выводится на экран.

*

#pragma

Перед выполнением препроцессирования компилятор просматривает набор поддерживаемых pragm. В отличие от остальных директив данная директива используется на этапе компиляции.

Часто используются прагма #exit и прагма #startup.

#pragma startup function name

Данная прагма определяет функции, которые будут выполняться при запуске программы до передачи управления функции main.

#exit

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]