| |
BIGLIB |
| большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно |
|
| |
ФАНТАСТИКА |
| фентези,
фантастика, фантастические повести |
|
| |
ФИЛОСОФИЯ |
книги, которые заставляют
задуматься над окружающим тебя миром.
|
|
| |
МЕДИЦИНА |
медицинские книги,
методички,
народные лечебники |
|
| |
КУЛИНАРИЯ |
рецепты
тортов, консервирование,
все о спиртных
напитках. |
|
| |
СТИХИ |
| стихи популярных
и не очень авторов |
|
| |
ТВОРЧЕСТВО |
| народное творчество,
стихи, песни и т.д. |
|
| |
ЮМОР |
| анекдоты, приколы,
смешные истории |
|
| |
ЭРОТИКА |
| эротические рассказы,
книги о технике секса,
кама-сутра и др. |
|
|
| |
 |
ну 32 бита и задают адрес сегмента и смещение.
Иногда, когда используется модель данных одного размера, у
вас может возникнуть желание объявить указатель с размером или
форматом другим чем у используемого по умолчанию. Вы можете сде-
лать это с помощью модификаторов near, far и huge.
Указатель типа near имеет размер 16 бит; он использует теку-
щее содержимое регистра сегмента данных (DS) для определения ад-
реса сегмента. По умолчанию он используется для малых моделей
данных. При использовании указателей типа near, данные вашей
программы ограничены размером 64 K текущего сегмента данных.
Указатель типа far имеет размер 32 бита и содержит как ад-
рес, так и смещение. По умолчанию он используется для больших мо-
делей. При использовании указателей типа far допускаются ссылки
на данные в пределах адресуемого пространства 1 Мб процессора
Intel 8088/8086.
Указатель типа huge имеет размер 32 бита и аналогично преды-
дущему, содержит адрес сегмента и смещение, однако, в отличии от
указателей типа far, указатель huge всегда поддерживается норма-
лизованным. Более детально он рассматривается в главе 12, а здесь
дается отличие от указателей типа far:
# Операторы отношения (==, !=, <, >, <=, >=) работают коррект-
но с указателями типа huge; но не с указателями типа far.
- 269,270 -
# Любые арифметические операции над указателем huge воздейс-
твуют как на адрес сегмента, так и на смещение (из-за нормализа-
ции); при использовании far указателей - воздействие распростра-
няется только на смещение.
# Заданный указатель типа huge может быть увеличен в пределах
1 Мб адресного пространства; указатель типа far, соответственно,
будет циклически переходить на начало сегмента в 64К.
# При использовании указателей типа huge требуется дополни-
тельное время, т.к. программы нормализации должны вызываться пос-
ле выполнения любой арифметической операции над указателями.
Структуры и объединения (K&R раздел 8.5)
-----------------------------------------------------------------
Турбо Си поддерживает реализацию структур и объединений сог-
ласно K&R, а также обеспечивает следующие дополнительные возмож-
ности.
Выравнивание слов
-----------------------------------------------------------------
Если вы используете опцию -a (Alignment...Word) при компиля-
ции, Турбо Си будет заполнять структуру (или объединение) байтами
так, как это требуется для выравнивания слов. В результате:
# Структура будет начинаться с границы слова (четный адрес).
# Любой элемент с не-char типом, будет иметь четное смещение
от начала структуры.
# Если необходимо, в конец будет добавлен байт для гарантии
- 271,272 -
того, что полная структура содержит четное число байт.
Поля бит
-----------------------------------------------------------------
В Турбо Си поле бит может иметь тип либо signed, либо
unsigned int и может занимать от 1 до 16 бит. Поля бит размещают-
ся в направлении от младших к старшим битам в слове. Например,
struct mystruct {
int i : 2;
unsigned j : 5;
int : 4;
int k : 1;
unsigned m : 4;
} a, b, c;
обеспечивает следующее размещение:
__________________________________________________
|15|14|13|12|11 |10| 9| 8| 7| 6| 5| 4| 3| 2| 1| 0|
|--|--|--|--|---|--|--|--|--|--|--|--|--|--|--|--|
| x| x| x| x| x | x| x| x| x| x| x| x| x| x| x| x|
|-----------|---|-----------|--------------|-----|
|<ДДДДДДДДД>|<Д>|<ДДДДДДДДД>|<ДДДДДДДДДДДД>|<ДДД>|
|-----------|---|-----------|--------------|-----|
| m | k |не использ.| j | i |
|___________|___|___________|______________|_____|
Поля целого типа хранятся в одной из двух форм; самый левый
бит - знаковый бит. Например, поле бит типа signed int шириной 1
бит может хранить только значение -1 или 0, и любое ненулевое
значение будет интерпретироваться как -1.
- 273,274 -
Операторы (K&R 9)
-----------------------------------------------------------------
В Турбо Си реализованы все операторы, описанные в K&R, без
исключений и модификаций.
Определения внешних функций (K&R 10.1)
-----------------------------------------------------------------
В Турбо Си описание extern, заданное внутри функции, имеет
действие в пределах данного блока. Описание не будет распозна-
ваться вне блока, в котором оно определено. Однако, Турбо Си бу-
дет запоминать описания, для того чтобы сопоставить их с последу-
ющими описаниями тех же самых объектов.
Турбо Си поддерживает большинство предложенных ANSI расшире-
ний к определениям функций K&R, включая, в частности, дополни-
тельные модификаторы функций и прототипы функций. Турбо Си под-
держивает также несколько собственных расширений и определений
функций, таких как функции типа interrupt (прерывание).
Модификаторы типа функции (K&R 10.1.1)
-----------------------------------------------------------------
В дополнение к external и static, Турбо Си поддерживает ряд
модификаторов, специфицирующих описания функций: pascal, cdecl,
interrupt, near, far и huge.
Модификатор функции pascal
--------------------------
Модификатор pascal, используемый в Турбо Си, предназначен
для функций (и указателей на функции), которые используют приня-
тую в Паскале последовательность передачи параметров. Это позво-
ляет писать на языке Си функции, которые могут быть вызванными из
программ, написанных на других языках; а также обращаться из ва-
ших Си программ к внешним программам, написанным на языках отлич-
ных от Си. Имя функции преобразуется к верхнему регистру, для
правильной работы компоновщика.
Примечание: использование опции компилятора -p (Calling
- 275,276 -
convention...Pascal) будет вызывать обращение со всеми функциями
(и указателями на эти функции) как если бы они были типа pascal.
Кроме того, функции, объявленные типа pascal, могут вызываться из
Си программ, также как и Си программа может быть вызвана из функ-
ции, имеющей тип pascal. Например, если вы объявили и откомпили-
ровали следующую функцию:
pascal putnums(unt i, int j, int k)
{
printf("And the answers are: %d, %d и %d\n",i,j,k);
}
другая Си программа может затем компоноваться с ней и обращаться
к ней, используя описание:
pascal putnums(int i, int j, int k);
main()
{
putnums(1,4,9);
}
Функции типа pascal не могут иметь различное число аргумен-
|
adfun.ru
|
|
|
|