Главная страница

С самоучитель. Уроки по с ravesli com 2 предисловие


Скачать 2.56 Mb.
НазваниеУроки по с ravesli com 2 предисловие
АнкорС самоучитель
Дата21.02.2022
Размер2.56 Mb.
Формат файлаpdf
Имя файлаprobnik_uroki_cpp_ravesli.pdf
ТипУрок
#369439
страница3 из 6
1   2   3   4   5   6
Конфигурация "Debug" предназначена для отладки вашей программы.
Эта конфигурация отключает все настройки по оптимизации, включает информацию об отладке, что делает ваши программы больше и медленнее, но упрощает проведение отладки. Режим "Debug" обычно используется в качестве конфигурации по умолчанию.
Конфигурация "Release" используется для сборки программы для её дальнейшего выпуска. Программа оптимизируется по размеру и производительности и не содержит дополнительную информацию об отладке.
Например, исполняемый файл программы "Hello, World!" из предыдущего урока, созданный в конфигурации "Debug", у меня занимал 65 KB, в то время как исполняемый файл, построенный в конфигурации "Release", занимал всего лишь 12 KB.
Переключение между режимами "Debug" и "Release" в Visual
Studio
ravesli.com
39
Самый простой способ изменить конфигурацию проекта – выбрать соответствующую из выпадающего списка на панели быстрого доступа:
Переключение между режимами "Debug" и "Release" в
Code::Blocks
В Code::Blocks на панели быстрого доступа есть также выпадающий список, где вы можете выбрать соответствующий режим конфигурации:
Заключение
Используйте конфигурацию "Debug" при разработке программ, а конфигурацию "Release" при их выпуске (когда уже будете готовы представить программу на всеобщее обозрение).
ravesli.com
40
Урок №7. Решения самых распространенных проблем
В этом уроке мы рассмотрим наиболее частые проблемы, с которыми сталкиваются новички в C++.
Проблема №1
Как использовать русский язык в программах C++?
Ответ №1
Чтобы выводить кириллицу в C++ нужно подключить заголовочный файл
Windows.h:
#include
И прописать следующие две строчки в функции main():
SetConsoleCP
(
1251
);
SetConsoleOutputCP
(
1251
);
Проблема №2
При выполнении программы появляется чёрное консольное окно, а
затем сразу пропадает.
Ответ №2
Некоторые компиляторы (например, Bloodshed’s Dev C++) автоматически не задерживают консольное окно после того, как программа завершила своё выполнение. Если проблема в компиляторе, то следующие два шага решат эту проблему:
Во-первых, добавьте следующую строчку кода в верхнюю часть вашей программы:
#include
ravesli.com
41
Во-вторых, добавьте следующий код в конец функции main() (прямо перед оператором return): std
::
cin clear
();
std
::
cin ignore
(
32767
,
'\n'
);
std
::
cin get
();
Таким образом программа будет ожидать нажатия клавиши, чтобы закрыть консольное окно. Вы получите дополнительное время, чтобы хорошенько всё рассмотреть/изучить. После нажатия любой клавиши, консольное окно закроется.
Другие решения, такие как system("pause");, могут работать только на определённых операционных системах, поэтому вариант выше предпочтительнее.
Примечание: Visual Studio не задерживает консольное окно, если выполнение запущено с отладкой ("Отладка" > "Начать отладку" или
F5
). Если вы хотите, чтобы была пауза - воспользуйтесь решением выше или запустите программу без отладки ("Отладка" > "Запуск без отладки"
или Ctrl+F5).
Проблема №3
При компиляции программы я получаю следующую ошибку:
"c:vcprojectstest.cpp(263) :fatal error C1010: unexpected end of file while
looking for precompiled header directive".
Ответ №3
Эта ошибка свидетельствует о том, что вы забыли подключить предварительно скомпилированный заголовок pch.h. Для устранения этой проблемы, вам нужно просто добавить следующую строчку кода в самый верх программы:
ravesli.com
42
#include "pch.h"
Обратите внимание, в программах с несколькими файлами, каждый файл должен начинаться именно с этой строчки кода. В качестве альтернативы, вы можете просто отключить использование предварительно скомпилированных заголовков.
Проблема №4
При использовании cin, cout или endl компилятор говорит, что cin,
cout или endl являются "undeclared identifier" (необъявленными
идентификаторами).
Ответ №4
Во-первых, убедитесь, что у вас присутствует следующая строчка кода в верхней части вашей программы:
#include
Во-вторых, убедитесь, что cin, cout или endl имеют префикс “std::”.
Например: std
::
cout
<<
"Hello world!"
<<
std
::
endl
;
Проблема №5
При использовании endl для перехода на новую строку, появляется
ошибка, что end1 является "undeclared identifier".
Ответ №5
Убедитесь, что вы не спутали букву l (нижний регистр L) в endl с цифрой 1.
В endl все символы являются буквами. Также легко можно спутать заглавную букву О с цифрой 0 (нуль).
ravesli.com
43
Проблема №6
Моя программа компилируется, но работает не так как нужно. Что
мне делать?
Ответ №6
Выполните отладку программу. Детальнее об этом в уроке №26 и уроке
№27.
Проблема №7
Как включить нумерацию строк в Visual Studio?
Ответ №7
Перейдите в меню "Средства" > "Параметры":
ravesli.com
44
Затем откройте вкладку "Текстовый редактор" > "Все языки" > "Общие" и поставьте галочку возле "Номера строк", затем нажмите "ОК":
Проблема №8
При компиляции программы я получаю следующую ошибку:
"unresolved external symbol _main or _WinMain@16".
Ответ №8
Это означает, что ваш компилятор не может найти главную функцию main(). Все программы должны содержать эту функцию.
Здесь есть несколько пунктов, которые нужно проверить:

Есть ли в вашей программе функция main()?

Слово main написано правильно?

Подключен ли файл, который содержит функцию main(), к вашему проекту? (если нет, то переместите функцию main() в файл, который
ravesli.com
45 является частью вашего проекта, либо добавьте этот файл в ваш проект)

Подключен ли файл, содержащий функцию main(), к компиляции?
Проблема №9
При компиляции программы я получаю следующее предупреждение:
“Cannot find or open the PDB file”.
Ответ №9
Это не ошибка, а предупреждение. На работоспособность вашей программы оно не повлияет. Тем не менее, в Visual Studio вы можете решить всё следующим образом: перейдите в меню "Отладка" >
"Параметры" > "Отладка" > "Символы" и поставьте галочку возле
"Серверы символов (Майкрософт)", затем нажмите "ОК".
Проблема №10
Я использую Code::Blocks или G++, но функционал C++11/C++14 не
работает.
Ответ №10
В Code::Blocks перейдите в "Project" > "Build options" > "Compiler settings" >
"Compiler flags" и поставьте галочку возле пункта "Have g++ follow C++14
ISO C++ language standard".
Смотрите уроке №4, там есть скриншоты, как это сделать.
При компиляции в g++, добавьте следующий код в командную строку:
-std=c++14
ravesli.com
46
Проблема №11
Я запустил программу, появилось консольное окно, но ничего не
выводится.
Ответ №11
Ваш антивирус может блокировать выполнение вашей программы.
Попробуйте отключить его на время и запустите программу ещё раз.
У меня есть другая проблема, с которой я не могу разобраться.
Как и где я могу получить ответ?
По мере прохождения уроков, у вас, несомненно, появятся вопросы или вы столкнетесь с проблемами. Что делать?
Во-первых, спросите у Google. Четко сформулируйте вашу проблему и просто погуглите. Если у вас есть сообщение об ошибке - скопируйте его и вставьте в поиск Google, используя кавычки. Скорее всего, кто-то уже задал такой же вопрос, как у вас, и получил на него ответ.
Если Google не помог, то спросите на специализированных сервисах вопросов/ответов/форумов. Вот самые популярные из них:

Stack Overflow

CyberForum

Toster
Но будьте внимательны и старайтесь максимально конкретизировать свою проблему, а также не забудьте указать, какую операционную систему и IDE вы используете, а также укажите, что вы пробовали сделать самостоятельно.
ravesli.com
47
Урок №8. Структура программ
Компьютерная программа – это последовательность инструкций, которые сообщают компьютеру, что ему нужно сделать.
Стейтменты
Cтейтмент (англ. "statement") – это наиболее распространённый тип инструкций в программах. Это и есть та самая инструкция, наименьшая независимая единица в языке С++. Стейтмент в программировании – это то же самое, что и предложение в русском языке. Мы пишем предложения, чтобы выразить какую-то идею. В C++ мы пишем стейтменты, чтобы выполнить какое-то задание. Все стейтменты в C++
заканчиваются точкой с запятой.
Есть много разных видов стейтментов в C++. Рассмотрим самые распространённые из них: int x
;
x
=
5
;
std
::
cout
<<
x
;
int х
– это стейтмент объявления (англ. "statement declaration"). Он сообщает компилятору, что х является переменной. В программировании каждая переменная имеет свою ячейку в памяти. Все переменные в программе должны быть объявлены, прежде чем использованы. Мы детальнее поговорим о переменных в следующих уроках. х = 5
– это стейтмент присваивания (англ. "assignment statement").
Здесь мы присваиваем значение 5 переменной х. std::cout << x;
– это стейтмент вывода (англ. "output statement").
Мы выводим значение переменной х на экран.
ravesli.com
48
Выражения
Компилятор также способен обрабатывать выражения. Выражение (англ.
"expression")
– это математический объект, который производит значение. Например, в математике выражение 2 + 3 производит значение 5. Выражениями могут быть:

значения (например: 2, 4);

переменные (например: х, у);

операторы (например: +, -);

функции.
Они могут быть как одним значением (например, 2 или х), так и комбинацией значений (например: 2 + 3, 2 + х, х + у или (2 + х) *
(y - 3)
). Например, х = 2 + 3; – это корректный стейтмент присваивания. Выражение 2 + 3 производит результат: значение 5.
Затем значение 5 присваивается переменной х.
Функции
В C++ стейтменты объединяются в блоки – функции. Функция – это последовательность стейтментов. Каждая программа в C++ должна содержать главную функцию main(). Именно с первого стейтмента в main() и начинается выполнение программы. Функции, как правило, выполняют конкретное задание. Например, функция max() может содержать стейтменты, которые определяют максимальное число из заданных двух. Функция calculateGrade() может рассчитывать оценку студента. Более детально об этом мы ещё поговорим в следующих уроках.
Совет: Пишите функцию main() в файле .cppс тем же именем, что и проект. Например, если вы пишите программу Chess, то поместите вашу функцию main() в chess.cpp.
ravesli.com
49
Библиотеки
Библиотека – это набор скомпилированного кода (например, функций), который был "упакован" для повторного использования в других программах. С помощью библиотек можно расширить возможности программ. Например, если вы пишете игру, то вам придётся подключать библиотеки звука или графики (если вы самостоятельно не хотите их писать).
Язык C++ не такой уж и большой, как вы могли бы подумать. Тем не менее, он идёт в комплекте со Стандартной библиотекой С++, которая предоставляет дополнительный функционал. Одной из наиболее часто используемых частей стандартной библиотеки C++ является библиотека
iostream
, которая позволяет выводить данные на экран и обрабатывать пользовательский ввод.
Пример простой программы
Теперь, когда у вас есть общее представление о том, что такое стейтменты, функции и библиотеки, давайте рассмотрим ещё раз программу “Hello, world!”:
#include int main
()
{
std
::
cout
<<
"Hello, world!"
;
return
0
;
}
Строка №1: Специальный тип инструкции, который называется
директивой препроцессора. Директивы препроцессора сообщают компилятору, что ему нужно выполнить определённое задание. В этом случае мы говорим компилятору, что хотели бы подключить содержимое заголовочного файла iostream к нашей программе. Заголовочный файл
ravesli.com
50 iostream позволяет нам получить доступ к функционалу библиотеки iostream, что позволяет выводить нам данные на экран.
Строка №2: Пустое пространство, которое игнорируется компилятором.
Строка №3: Объявление главной функции main().
Строки №4 и №7: Указываем компилятору область функции main(). Всё, что находится между открывающей фигурной скобкой в строке №4 и закрывающей фигурной скобкой в строке №7, считается частью функции main().
Строка №5: Наш первый стейтмент (заканчивается точкой с запятой) – стейтмент вывода. std::cout – это специальный объект, используя который мы можем выводить данные на экран. << – это оператор вывода.
Всё, что мы отправляем в std::cout – выводится на экран. В этом случае, мы выводим текст "Hello, world!".
Строка №6: Оператор возврата return. Когда программа завершает своё выполнение, функция main() передаёт значение обратно в операционную систему, которое указывает на результат выполнения программы: успешно ли выполнение программы или нет.
Если return возвращает значение 0, значит всё хорошо! Ненулевые числа используются для указания того, что что-то пошло не так и выполнение программы было прервано. О return мы ещё поговорим детальнее в соответствующем уроке.
Синтаксис и синтаксические ошибки
Как вы, наверное, знаете, в русском языке все предложения подчиняются правилам грамматики. Например, каждое предложение должно заканчиваться точкой. Правила, которые регулируют построение предложений, называются синтаксисом. Если вы не поставили точку и
ravesli.com
51 записали два предложения подряд, то это является нарушением синтаксиса русского языка.
C++ также имеет свой синтаксис: правила написания кода/программ. При компиляции вашей программы, компилятор отвечает за то, чтобы ваша программа соответствовала правилам синтаксиса языка C++. Если вы нарушили правила, то компилятор будет ругаться и выдаст вам ошибку.
Например, давайте посмотрим, что произойдёт, если мы не укажем в конце стейтмента точку с запятой:
#include int main
()
{
std
::
cout
<<
"Hello world!"
return
0
;
}
Результат:
E0065: требуется точка с запятой ";"
C2143: синтаксическая ошибка: отсутствие ";" перед "}"
Допущена синтаксическая ошибка в строке №6: забыли поставить точку с запятой перед return. В этом случае ошибка на самом деле в конце строки
№5. В большинстве случаев компилятор правильно определяет строку с ошибкой, но есть ситуации, когда ошибка не заметна вплоть до начала следующей строки.
Синтаксические ошибки нередко совершаются при написании программ. К счастью, большинство из них можно легко найти и исправить. Но следует помнить, что программа может быть полностью скомпилирована и выполнена только при отсутствии ошибок.
ravesli.com
52
Тест
Теперь давайте проверим то, как вы усвоили материал выше. Дайте ответы на следующие вопросы:

В чём разница между стейтментом и выражением?

В чём разница между функцией и библиотекой?

Чем заканчиваются стейтменты в С++?

Что такое синтаксическая ошибка?
ravesli.com
53
Урок №9. Комментарии
Комментарий – это строка (или несколько строк) текста, которая вставляется в исходный код для объяснения того, что делает этот код. В
C++ есть два типа комментариев: однострочные и многострочные.
Однострочные комментарии
Однострочные комментарии – это комментарии, которые пишутся после символов //. Они размещаются в отдельных строках и всё, что находится после этих символов комментирования – игнорируется компилятором. Например: std
::
cout
<<
«Hello
,
world
!
»
<<
std
::
endl
;
// всё, что находится от начала
двойного слеша - игнорируется компилятором
Как правило, однострочные комментарии используются для объяснения одной строчки кода: std
::
cout
<<
«Hello
,
world
!
»
<<
std
::
endl
;
// cout и endl находятся в
библиотеке iostream
std
::
cout
<<
«It is so exciting
!
»
<<
std
::
endl
;
// эти комментарии усложняют
чтение кода
std
::
cout
<<
«Yeah
!
»
<<
std
::
endl
;
// особенно, когда строки разной длины
Размещая комментарии справа от кода, мы затрудняем себе как чтение кода, так и чтение комментариев. Следовательно, однострочные комментарии лучше размещать над строками кода:
// cout и endl находятся в библиотеке iostream
std
::
cout
<<
«Hello
,
world
!
»
<<
std
::
endl
;
// теперь уже легче читать
std
::
cout
<<
«It is so exciting
!
»
<<
std
::
endl
;
// не так ли?
std
::
cout
<<
«Yeah
!
»
<<
std
::
endl
;
ravesli.com
54
Многострочные комментарии
Многострочные комментарии – это комментарии, которые пишутся между символами /* */. Всё, что находится между звёздочками – игнорируется компилятором:
/* Это многострочный комментарий.
Эта строка игнорируется
и эта тоже. */
Так как всё, что находится между звёздочками – игнорируется, то иногда вы можете наблюдать следующее:
/* Это многострочный комментарий.
* Звёздочки слева
* упрощают чтение текста
*/
Многострочные комментарии не могут быть вложенными (т.е. одни комментарии внутри других):
/* Это многострочный /* комментарий */ а это уже не комментарий
*
/
// Верхний комментарий заканчивается перед первым */, а не перед вторым */
1   2   3   4   5   6


написать администратору сайта