А) определения символических констант

#define TWO 2

#define MSG “Приднестровский Университет”

#define PX printf(“X равен %d\n”,x)

#define FMT “X равен %d”

void main (void) {

int x=TWO;

PX;

Printf(FMT,x);

Printf(“%s\n”,MSG);

Printf(“TWO:MSG\n”);

}

Макроопределение не должно содержать пробелы. Процесс прохождения от макроопределения до заключительной строки называется макрорасширением. Препроцессор делает подстановки.

Б) Макроопределение с аргументом

Очень похоже на функцию (макро-функция).

#define SQUARE(x) x*x

#define PR(x) printf(“X равен %d\n”,x)

void main(void) {

int x=4; int z;

z=SQUARE(x); //16

PR(z);

Z=SQUARE(2); //4

PR(z);

PR(SQUARE(X));

PR(100/SQUARE(2));//100

PR(SQUARE(X+2)); //14

PR(SQUARE(++X)); //30

}

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

 

Включение файлов

 

Директива #include позволяет включить в текст содержимое файла, имя которого является параметром директивы.

1. #include <stdio.h> - ищет в системном каталоге

2. #include “stdio.h” – ищет в текущем рабочем каталоге.

3. Можно создавать свои файлы с функциями и подключать.

#include “my_file.cpp”

4. Можно подключать макроопределение. Макрорасширение макроса должно приводить к одной из первых двух форм директивы.

#define MY_FILE “d:\\bc\work\\my_file.h”

#include MY_FILE

 

Условная компиляция

 

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

#if константное_выражение

[фрагмент текста]

[#elif константное_выражение

фрагмент текста]

...

[#else фрагмент текста]

#endif

 

Результатом вычисления константного_выражения является целое число. Если оно не 0, то выполняется фрагмент текста программы от директивы #if до одной из директив #else, #elif или #endif.

 

1. #ifdef CI

#include <stdio.h>

#define MAX 80

#else

#include <iostream.h>

#define MAX 132

#endif

 

2. #ifndef – если макроопределение не определено

#ifndef MY_FILE // файл будет компилироваться только один раз

#define MY_FILE //когда макрос не определен

#include “my_fyle”

#endif

 

3. #if SYS == ”IBM”

//похоже на оператор, за ним следует константное выражение

//которое считается истинным, если оно не равно 0

#endif

 

4. Можно исключить блок программы

#ifdef любое имя

*****

#endif

 

#if defined(__LARGE__)||defined(__HUGE__)

typedef INT long

#else

typedef INT int

#endif

 

УКАЗАТЕЛИ

 

Память состоит из байтов, каждый из которых пронумерован, начиная с 0, 1, 2 ... Номер – это адрес. В Си есть переменные, которые могут содержать этот адрес – указатели и операция взятия адреса - &.

int var=1; - определение и инициализация переменной. var – её имя.

printf ("%d %d\n",var, &var); 1 12136

Машинный код команды можно выразить словами. "Выделить 2 байта памяти, присвоить им имя var. Поместить в ячейку с адресом 12136 число". Фактический адрес этой переменной 12136, а его символическое представление &var.

Значением переменной типа указатель служит адрес некоторой величины. Дадим имя этой переменной ptr; тогда можно написать ptr=&var;

В этом случае говорим "ptr указывает на var", где ptr-переменная, &var-константа.

ptr=&num; - теперь указывает на num.

 

13.1 Операция косвенной адресации *

 

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

val=*ptr; //val==num

*ptr = 10; //num==10

 








Дата добавления: 2018-11-25; просмотров: 425;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.009 сек.