Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015

Здесь есть возможность читать онлайн «Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Год выпуска: 0101, Издательство: Вильямс, Жанр: Старинная литература, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Язык программирования C. Лекции и упражнения (6-е изд.) 2015: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Язык программирования C. Лекции и упражнения (6-е изд.) 2015»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Язык программирования C. Лекции и упражнения (6-е изд.) 2015», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Ниже приведен вывод, исходя из предположения, что компилятор поддерживает современные возможности С:

Первоначально n = 8 по адресу 0x7fff5fbff8c8 цикл 1: n = 1 по адресу 0x7fff5fbff8c4 цикл 1: n = 2 по адресу 0x7fff5fbff8c4 После цикла 1 n = 8 по адресу 0x7fff5fbff8c8 индекс цикла 2 n = 1 по адресу 0x7fff5fbff8c0 цикл 2: n = 6 по адресу 0x7fff5fbff8bc индекс цикла 2 n = 2 по адресу 0x7fff5fbff8c0 цикл 2: n = 6 по адресу 0x7fff5fbff8bc После цикла 2 n = 8 по адресу 0x7fff5fbff8c8

НА ЗАМЕТКУ! Поддержка C99 и C11

Некоторые компиляторы могут не поддерживать правила области видимости С99/С11. (В настоящее время одним из таких компиляторов является Microsoft Visual Studio 2012.) Другие компиляторы могут предлагать опцию включения этих правил. Например, на момент написания данной книги компилятор GCC по умолчанию поддерживает многие возможности С99, но для активизации средств, применяемых в листинге 12.2, требует указания опции -std=c99:

gcc -std=c99 forc99.c

Подобным же образом, версии GCC и Clang могут требовать использования опции -std=clx или -std=c11 для распознавания средств С11.

Переменная n, объявленная в управляющем разделе первого цикла for, имеет область видимости до конца цикла и скрывает исходную переменную n. Но после того как управление покидает цикл, исходная переменная n возвращается в область видимости.

Во втором цикле for переменная n, объявленная как индекс цикла, скрывает исходную переменную n. Затем переменная n, объявленная внутри тела цикла, скрывает индекс цикла n. Как только программа завершит выполнение тела, переменная n, объявленная в теле, исчезает, а в проверке цикла участвует индекс n. Когда завершится выполнения всего цикла, в области видимости появляется исходная переменная n.

490 Глава 12

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

Инициализация автоматических переменных

Автоматические переменные не инициализируются до тех пор, пока вы не сделае те это явно. Взгляните на следующие объявления:

int main(void)

{

int repid;

int tents = 5;

Переменная tents инициализируется значением 5, но repid получает значение, которое раньше находилось в области памяти, выделенной под эту переменную. Нельзя рассчитывать на то, что этим значением будет 0. Вы можете инициализировать автоматическую переменную неконстантным выражением при условии, что все задействованные в нем переменные были определены раньше:

int main(void)

{

int ruth = 1;

int ranсe = 5 * ruth; // используется ранее определенная переменная

Регистровые переменные

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

int main(void)

{

register int quick;

Мы говорим “при благоприятном стечении обстоятельств”, потому что объявление переменной как регистровой является скорее запросом, чем прямым указанием. Компилятор должен сопоставить ваши требования с количеством доступных регистров или объема быстродействующей памяти, или же он может просто проигнорировать запрос, и ваше пожелание не будет удовлетворено. В таком случае переменная становится обычной автоматической переменной; тем не менее, применять к ней операцию взятия адреса по-прежнему нельзя. Вы можете запросить, чтобы формальные параметры были регистровыми переменными. Для этого просто воспользуйтесь ключевым словом register в заголовке функции:

void macho(register int n)

Типы, которые допускается объявлять как register, могут оказаться ограниченными. Например, регистры в процессоре могут быть недостаточно большими, чтобы умещать тип double.

Классы хранения, связывание и управление памятью 491

Статические переменные с областью видимости в пределах блока

Название статическая переменная звучит как взаимоисключающее, вроде переменной, которая не может быть изменена. В действительности характеристика статическая означает, что переменная остается помещенной в память, а не обязательно относится к значению. Переменные с областью видимостью в пределах файла автоматически (и обязательно) имеют статическую продолжительность хранения. Как упоминалось ранее, можно также создавать локальные переменные, имеющие область видимости в пределах блока, но статистическую продолжительность хранения. Такие переменные обладают такой же областью видимости, как автоматические переменные, однако они не исчезают, когда содержащая их функция завершает свою работу. Другими словами, такие переменные имеют область видимости в пределах блока, не имеют связывания, но имеют статическую продолжительность хранения. Компьютер помнит их значения от одного вызова функции до следующего. Такие переменные создаются в результате объявления в блоке (что обеспечивает область видимости в пределах блока и отсутствие связывания) со спецификатором класса хранения static (предоставляющим статическую продолжительность хранения).

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Язык программирования C. Лекции и упражнения (6-е изд.) 2015»

Представляем Вашему вниманию похожие книги на «Язык программирования C. Лекции и упражнения (6-е изд.) 2015» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Язык программирования C. Лекции и упражнения (6-е изд.) 2015»

Обсуждение, отзывы о книге «Язык программирования C. Лекции и упражнения (6-е изд.) 2015» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x