Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
91-100.docx
Скачиваний:
6
Добавлен:
11.09.2019
Размер:
33.32 Кб
Скачать
  1. Дополнительные операции препроцессора. Операция подстановки строки (#). Операция конкатенации (##).

Дополнительные операции препроцессора.

Существуют три операции, которые можно использовать только в директивах препроцессора: подстановка строки (#), конкатенация (##) и подстановка символа (#@).

Операция подстановки строки (#).

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

#define STRINGIZE(ivalue) printf(#ivalue " is: %d",ivalue)

...

...

...

int ivalue = 2;

STRINGIZE(ivalue);

Операция конкатенации (##).

Одно из применений операции конкатенации — динамическое создание имен переменных и макроопределений. Операция объединяет синтагмы, и, удаляя все пробелы, образует новое имя. Если операция ## используется в макроопределении, то она обрабатывается после подстановки параметров макроса, перед тем, как этот макрос проверяется на наличие каких-либо дополнительных операций.

99Дополнительные операции препроцессора. Операция подстановки символа (#@). Обработка ошибок: perror(). Операция подстановки символа (#@).

Операция подстановки символа предшествует формальным параметрам в макроопределении. При этом фактический параметр рассматривается как отдельный символ, заключенный в простые кавычки. Например:

#define CHARIZEIT(cvalue) #@cvalue

...

...

...

cletter = CHARIZEIT(z);

Компилятор получит следующее выражение:

cletter = 'z';

Обработка ошибок: perror().

Эта функция выводит в поток stderr системное сообщение о последней ошибке, произошедшей при вызове библиотечной процедуры.

Функция реrrоr() имеет единственный параметр — строку символов. Обычно передаваемый аргумент — это строка, идентифицирующая файл или функцию, где произошла ошибка. Использовать эту функцию просто; это показано в следующем примере:

#include <stdio.h>

void main(void)

{

FILE *fpinfile;

fpinfile = fopen("input.dat", "r");

if (!fpinfile)

perror("Could not open input.dat in file main() :");

}

100Модели памяти. Модель tiny. Модель small. Модель medium. Модель compact. Модель large. Модель huge.

Модели памяти.

Компилятор Visual C/C++ поддерживает шесть стандартных моделей памяти — tiny (миниатюрная), small (малая), medium (средняя), compact (компактная), large (большая) и huge (гигантская) — а также пользовательскую модель, которая используется в тех приложениях, где имеются особые требования к хранению данных и кода.

Модель tiny.

При использовании модели памяти tiny создаются программные файлы с расширением .СОМ. Такие программы содержат один 64 Кб сегмент для кода и данных.

Модель small.

Когда выбрана опция small, программа может иметь два сегмента: один для данных и один для кода. После компиляции программы с моделью памяти small получают расширение .ЕХЕ. Эта опция используется по умолчанию, когда не указана другая модель памяти.

Модель medium.

Программа с моделью памяти medium может иметь один сегмент для данных, но множество сегментов — для кода. Поэтому такие программы могут содержать более 64 Кб кода, но не более 64 Кб данных. По мере необходимости программный код может занимать столько места, сколько необходимо, однако при этом размер всего блока данных не должен превышать 64 Кб.

Модель compact.

При использовании модели памяти compact программы могут иметь несколько сегментов данных, но только один сегмент кода. Эта модель памяти наиболее подходит для тех приложений С, у которых большой объем данных, но короткий код.

Модель large.

приложения с моделью памяти large могут иметь по несколько сегментов для кода и данных. Однако, размер отдельного объекта данных не должен превышать 64 Кб. Эта модель памяти подходит для основных программ, работающих с большими объемами данных.

Модель huge.

Модели памяти huge и large схожи. Главное отличие заключается в том, что при использовании модели huge снимаются ограничения на размер отдельных объектов данных. Однако, имеются ограничения на размер элементов массива, если этот массив больше, чем 64 Кб.

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