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

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

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

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - описание и краткое содержание, автор Стивен Прата, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

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

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

Интервал:

Закладка:

Сделать

Выпуск стандарта С99 усложняет ситуацию, поскольку в некоторых местах он делает С ближе к C++. Например, он позволяет разносить объявления по телу кода и распознает вариант комментария //.В других отношениях С99 углубляет отличия от C++, например, за счет добавления массивов переменной длины и ключевого слова restrict. Стандарт C11 кое в чем уменьшил брешь, к примеру, введя тип charl6_t, добавив ключевое слово _Alignas и создав макрос alignas для соответствия ключевому слову C++. Учитывая раннюю стадию развития С11 и неполное принятие С99 некоторыми поставщиками, мы сталкиваемся с отличиями между С90, С99 и СП, а также с отличиями между С++11 и каждым из упомянутых стандартов С. В этом разделе мы обратимся к будущему и обсудим ряд отличий между С99, C11 и C++. Тем временем, язык C++ также развивается, так что точные соответствия и несовпадения между языками С и C++ продолжат изменяться.

Прототипы функций

В отличие от С, в языке C++ прототипирование функций является обязательным. Это отличие проявляется, когда вы оставляете пустыми скобки в объявлении функции.

912 Приложение Б

В языке С пустые скобки означают, что это заблаговременное прототипирование, но в C++ это значит, что функция не имеет параметров. Таким образом, в C++ прототип

В С компилятор предполагает что вы применяете старую форму объявления функций - фото 709

В С компилятор предполагает, что вы применяете старую форму объявления функций. В C++ компилятор предполагает, что slice() — это то же самое, что slice (void), и вам не удастся объявить функцию slice (int, int).

К тому же язык C++ позволяет объявлять более одной функции с одним и тем же именем при условии, что они имеют разные списки аргументов.

Константы char

В С константы char трактуются как имеющие тип int, а в C++ — как принадлежащие типу char. Например, рассмотрим следующий оператор:

char ch = 'А';

В языке С константа 'А' сохраняется в области памяти с размером int; точнее говоря, код этого символа сохраняется как значение типа int. То же самое числовое значение также сохраняется в переменной ch, но здесь оно занимает только один байт памяти.

С другой стороны, в C++ для ' А' используется один байт, как и для ch. Это отличие не касается каких-либо примеров, рассмотренных в книге. Тем не менее, в некоторых программах на С применяются константы char, имеющие тип int, за счет использования символьной формы записи для представления целочисленных значений. Например, если система поддерживает 4-байтовый int, в С можно поступить следующим образом:

int х = 'ABCD'; /* нормально для 4-байтового int в С, но не в C++ */

Смысл ' ABCD' заключается в том, что это 4-байтовое значение int, в котором первый байт хранит символьный код буквы А, второй — символьный код В и т.д. Обратите внимание, что 'ABCD' существенно отличается от "ABCD". Первое значение — это просто причудливый способ написания значения int, но второе — это строка, которая соответствует адресу 5-байтового участка памяти.

Рассмотрим следующий код:

int х = 'ABCD';

char с = 'ABCD';

printf ("%d %d %c %c\n", x, 'ABCD', c, 'ABCD');

Справочные материалы 913

В нашей системе этот код генерирует такой вывод:

1094861636 1094861636 D D

Данный пример иллюстрирует, что если трактовать 'ABCD' как int, то это будет 4-байтовое целое значение, но если трактовать его как char, то программа обращает внимание только на последний байт. Попытка вывода 'ABCD' со спецификатором формата %s в нашей системе приводит к аварийному завершению программы, потому что числовое значение 'ABCD' (1094861636) выходит за рамки допустимых адресов.

Смысл применения значений, подобных 'ABCD', заключается в том, что так можно установить каждый байт в int независимым образом, поскольку каждый символ в точности соответствует одному байту. Однако более удачный подход, который не зависит от конкретных кодов символов, предусматривает использование для целочисленных констант шестнадцатеричных значений, учитывая тот факт, что каждая пара шестнадцатеричных цифр соответствует одному байту. Этот прием обсуждался в главе 15. (Ранние версии С не предоставляли шестнадцатеричной системы записи, так что, по всей видимости, сначала был разработан прием с многосимвольными константами.)

Модификатор const

В С глобальные идентификаторы const имеют внешнее связывание, но в C++ — внугреннее связывание. Другими словами, объявление в C++

const double PI = 3.14159; эквивалентно следующему объявлению в С:

static const double PI = 3.14159;

при условии, что оба они находятся вне функций. Правила C++ нацелены на то, чтобы упростить применение const в файлах заголовков. Если константа имеет внугреннее связывание, то каждый файл, включающий заголовок, получает собственную копию константы. Если же константа имеет внешнее связывание, то в одном файле должно присутствовать определяющее объявление, а во всех остальных файлах должно использоваться ссылочное объявление с ключевым словом extern.

Кстати, в C++ ключевое слово extern может применяться для обеспечения внешнего связывания значения const, поэтому оба языка позволяют создавать константы с внешним и внутренним связыванием. Разница состоит лишь в том, какой вид связывания используется по умолчанию.

Одно дополнительное свойство ключевого слова const в C++ заключается в том, что оно может применяться для объявления размера обычного массива:

const int ARSIZE = 100;

double loons[ARSIZE]; /* в C++ это тоже, что и double loons[100]; */

Такое же объявление можно делать и в С99, но это приведет к созданию массива переменной длины.

В языке C++, но не в С, значения const можно использовать для инициализации других значений const:

const double RATE = 0.06; // допустимо в C++, С

const double STEP =24.5; // допустимо в C++, С

const double LEVEL = RATE * STEP; // допустимо в C++, недопустимо в С

914 Приложение Б

Структуры и объединения

После объявления структуры или объединения с дескриптором в C++ этот дескриптор можно применять в качестве имени типа:

struct duo

{

int а; int b;

};

struct duo m; /* допустимо в С, C++ */

duo n; /* недопустимо в С, допустимо в C++ */

В результате имя структуры может конфликтовать с именем переменной. Например, следующая программа компилируется как программа на С, но не может быть успешно скомпилирована как программа на C++, поскольку C++ интерпретирует duo в операторе printf() как тип структуры, а не как внешнюю переменную:

#include float duo = 100.3; int main(void)

{

struct duo { int a; int b,(); struct duo у = { 2, 4};

printf ("%f\n", duo); /* допустимо в С, но не в C++ */ return 0;

}

В С и C++ можно объявлять одну структуру внутри другой:

struct box

{

struct point {int x; int y; } upperleft; struct point lowerright;

};

В языке С любую из структур можно использовать позже, но C++ требует специальной формы записи для вложенной структуры:

struct box ad; /* допустимо в С, C++ */

struct point dot; /* допустимо в С, недопустимо в C++ */

box::point dot; /* недопустимо в С, допустимо в C++*/

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

Интервал:

Закладка:

Сделать


Стивен Прата читать все книги автора по порядку

Стивен Прата - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


Отзывы читателей о книге Язык программирования C. Лекции и упражнения (6-е изд.) 2015, автор: Стивен Прата. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x