LoveRead.info » Книги » Разная литература » Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп

Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп

Книгу Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп читаем онлайн бесплатно полную версию! Чтобы начать читать не надо регистрации. Напомним, что читать онлайн вы можете не только на компьютере, но и на андроид (Android), iPhone и iPad. Приятного чтения!

288 0 18:03, 26-08-2023
Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп
26 август 2023

Книга Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп читать онлайн бесплатно без регистрации

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

    1 ... 299 300 301 302 303 304 305 306 307 ... 337
    Перейти на страницу:
    */

      FILE* fo = fopen(fn2, "w"); /* открываем файл fn для записи */

      if (fi == 0) error("невозможно открыть файл для ввода");

      if (fo == 0) error("невозможно открыть файл для вывода");

      /* чтение из файла с помощью функций ввода из библиотеки stdio,

         например, getc() */

      /* запись в файл с помощью функций вывода из библиотеки stdio,

         например, fprintf() */

      fclose(fo);

      fclose(fi);

    }

    Учтите: в языке С нет исключений, потому вы не можете узнать, что при обнаружении ошибок файлы были закрыты.

    27.7. Константы и макросы

    В языке С константы не являются статическими.

    const int max = 30;

    const int x; /* неинициализированная константа: OK в C

                    (ошибка в C++) */

    void f(int v)

    {

      int a1[max]; /* ошибка: граница массива не является константой

                      (OK в языке C++) */

                   /* (слово max не допускается в константном

                      выражении!) */

      int a2[x];   /* ошибка: граница массива не является константой */

      switch (v) {

      case 1:

        /* ... */

        break;

      case max:    /* ошибка: метка раздела case не является

                      константой (OK в языке C++) */

        /* ... */

        break;

      }

    }

    По техническим причинам в языке С (но не в языке C++) неявно допускается, чтобы константы появлялись из других модулей компиляции.

    /* файл x.c: */

    const int x;     /* инициализирована в другом месте */

    /* файл xx.c: */

    const int x = 7; /* настоящее определение */

    В языке С++ в разных файлах могут существовать два разных объекта с одним и тем же именем x. Вместо использования ключевого слова const для представления символьных констант программисты на языке С обычно используют макросы. Рассмотрим пример.

    #define MAX 30

    void f(int v)

    {

      int a1[MAX]; /* OK */

      switch (v) {

      case 1:

        /* ... */

        break;

      case MAX:    /* OK */

        /* ... */

        break;

      }

    }

     

     Имя макроса MAX заменяется символами 30, представляющими собой значение этого макроса; иначе говоря, количество элементов массива a1 равно 30, а меткой второго раздела case является число 30. По общепринятому соглашению имя макроса MAX состоит только из прописных букв. Это позволяет минимизировать ошибки, вызываемые макросами.

    27.8. Макросы

     

     Берегитесь макросов: в языке С нет по-настоящему эффективных способов избежать макросов, но их использование имеет серьезные побочные эффекты, поскольку они не подчиняются обычным правилам разрешения области видимости и типов, принятым в языках С и С++. Макросы — это вид текстуальной подстановки. См. также раздел А.17.2.

     

     Как защититься от потенциальных проблем, связанных с макросами, не отказываясь от них навсегда (и не прибегая к альтернативам, предусмотренным в языке С++?

    • Присваивайте всем макросам имена, состоящие только из прописных букв: ALL_CAPS.

    • Не присваивайте имена, состоящие только из прописных букв, объектам, которые не являются макросами.

    • Никогда не давайте макросам короткие или “изящные” имена, такие как max или min.

    • Надейтесь, что остальные программисты следуют этим простым и общеизвестным правилам.

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

    • определение “констант”;

    • определение конструкций, напоминающих функции;

    • улучшение синтаксиса;

    • управление условной компиляцией.

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

    Мы считаем, что макросы используются слишком часто, но в программах на языке С у них нет разумных и полноценных альтернатив. Их даже трудно избежать в программах на языке С++ (особенно, если вам необходимо написать программу, которая должна подходить для очень старых компиляторов или выполняться на платформах с необычными ограничениями).

    Мы приносим извинения читателям, считающим, что приемы, которые будут описаны ниже, являются “грязными трюками”, и полагают, что о них лучше не говорить в приличном обществе. Однако мы думаем, что программирование должно учитывать реалии и что эти (очень простые) примеры использования и неправильного использования макросов сэкономят часы страданий для новичков. Незнание макросов не приносит счастья. 

    27.8.1. Макросы, похожие на функции

    Рассмотрим типичный макрос, напоминающий функцию.

    #define MAX(x, y) ((x)>=(y)?(x):(y))

    Мы используем прописные буквы в имени MAX, чтобы отличить его от многих функций с именем max (в разных программах). Очевидно, что этот макрос сильно отличается от функции: у него нет типов аргументов, нет тела, нет инструкции return и так далее, и вообще, зачем здесь так много скобок? Проанализируем следующий код:

    int aa = MAX(1,2);

    double dd = MAX(aa++,2);

    char cc = MAX(dd,aa)+2;

    Он разворачивается в такой фрагмент программы:

    int aa = ((1)>=( 2)?(1):(2));

    double dd = ((aa++)>=(2)?( aa++):(2));

    char cc = ((dd)>=(aa)?(dd):(aa))+2;

    Если бы всех этих скобок не было, то последняя строка выглядела бы следующим образом.

    char cc = dd>=aa?dd:aa+2;

    Иначе говоря, переменная cc могла бы легко получить другое значение, которого вы не ожидали, исходя из определения макроса. Определяя макрос, не забывайте заключить в скобки каждый аргумент, входящий в выражение.

     

     С другой стороны, не всегда скобки могут спасти нас от второго варианта развертывания. Параметру макроса x было присвоено значение aa++, а поскольку переменная x в макросе MAX используется дважды, переменная a может инкрементироваться также дважды. Не передавайте макросу аргументы, имеющие побочные эффекты.

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

    template<class T> inline T max(T a, T b) { return a<b?b:a; }

    имя max разворачивается с аргументами T a и T b, и компилятор видит строку

    template<class T> inline T ((T a)>=(T

    1 ... 299 300 301 302 303 304 305 306 307 ... 337
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

    Прочитали книгу? Предлагаем вам поделится своим отзывом от прочитанного(прослушанного)! Ваш отзыв будет полезен читателям, которые еще только собираются познакомиться с произведением.


    Уважаемые читатели, слушатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

    • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
    • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
    • 3. Просьба отказаться от нецензурной лексики.
    • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

    Надеемся на Ваше понимание и благоразумие. С уважением, администратор LoveRead.info.


    Установить VPN и читай слушай бесплатно

    Новые отзывы

    1. Людмила Хофман Людмила Хофман10 июнь 22:13 У меня перевернулся мир после прочтения ваших книг! Так приятно и чисто на душе, ведь по сути неважно кто с кем , а только любовь... Долгая игра - Рейчел Рид
    2. Анна Анна08 июнь 11:28 Спасибо за новую историю жизни и любви на сайте,прочитала с удовольствием .... Давай поженимся - Юлия Резник
    3. Елена Елена08 июнь 11:13 Прочла несколько романов этого, без сомнения, талантливого автора. Впечатление прекрасное, но хотелось бы когда-нибудь прочесть... Предатель. Ты врал мне годами - Арина Арская
    Все комметарии
    Новинки бесплатной онлайн библиотеки