Переменные в C++: с чего начать новичку
Первая программа с переменными, объявление типов, ввод с клавиатуры и вывод результата. За 20 минут вы соберёте калькулятор возраста и разберётесь, почему компилятор ругается на типы.

К концу этой инструкции у вас будет собранная программа, которая спрашивает год рождения, считает возраст и печатает результат. По дороге вы объявите переменные разных типов, прочитаете ввод с клавиатуры и увидите, за что компилятор выдаёт ошибки. На всё уйдёт минут двадцать, если компилятор уже стоит.
Что нужно иметь до начала
Переменные — это именованные ячейки памяти, куда программа кладёт значения, чтобы потом их читать и менять. Прежде чем писать первую строку, проверьте, что готово рабочее окружение.
- Компилятор C++ с поддержкой стандарта C++17 или новее. Подойдёт GCC (g++) от версии 9, Clang от 10 или MSVC из состава Visual Studio 2019 и новее. Проверить версию: в терминале наберите
g++ --versionилиclang++ --version. - Любой текстовый редактор или среда: VS Code, CLion, Visual Studio, даже Блокнот сгодится для первого файла.
- Терминал (командная строка), если собираете вручную через компилятор.
Если g++ --version выдаёт «команда не найдена» — компилятор не установлен или не прописан в PATH. На Windows проще всего поставить MinGW-w64 или собрать через Visual Studio, на Linux — пакет build-essential, на macOS — Command Line Tools через xcode-select --install.
Шаг 1. Первая переменная и вывод
Создайте файл main.cpp и наберите:
#include <iostream>
int main() {
int age = 25; // целое число, переменная age со значением 25
std::cout << "Возраст: " << age << std::endl;
return 0;
}
Здесь int — тип переменной (целое число), age — имя, 25 — начальное значение. Скомпилируйте и запустите:
g++ -std=c++17 main.cpp -o app
./app
На Windows запуск может выглядеть как app.exe вместо ./app. Должна появиться строка Возраст: 25. Если появилась — переменная объявлена и выведена правильно, движемся дальше.
Шаг 2. Разные типы
Одним int дело не ограничивается. Каждый тип хранит свой вид данных и занимает разный объём памяти.
| Тип | Что хранит | Пример значения |
|---|---|---|
int | целое число | 42, -7 |
double | дробное число | 3.14, -0.5 |
char | один символ | 'A', '?' |
bool | истина или ложь | true, false |
std::string | строка текста | "Привет" |
Для std::string нужен свой заголовок. Расширьте программу:
#include <iostream>
#include <string>
int main() {
int age = 25;
double height = 1.82; // рост в метрах, дробное
bool isStudent = true; // логическое значение
std::string name = "Ира";
std::cout << name << ", " << age << " лет, рост "
<< height << ", студент: " << isStudent << std::endl;
return 0;
}
Обратите внимание: bool печатается как 1 (для true) или 0 (для false) — это нормальное поведение по умолчанию, а не ошибка.
Символ или строка — разные вещи
Одиночные кавычки 'A' — это char, одна буква. Двойные кавычки "A" — это уже строка. Перепутаете кавычки — компилятор выдаст ошибку типов. Держите это в голове: одинарные для символа, двойные для текста.
Шаг 3. Ввод с клавиатуры
Пока значения были жёстко вписаны в код. Дадим программе спросить их у пользователя через std::cin.
#include <iostream>
int main() {
int birthYear; // объявили без значения — заполним из ввода
std::cout << "Введите год рождения: ";
std::cin >> birthYear;
int currentYear = 2025;
int age = currentYear - birthYear;
std::cout << "Вам примерно " << age << " лет" << std::endl;
return 0;
}
Скомпилируйте, запустите, введите год и нажмите Enter. Программа должна напечатать разницу. Если ввели 1998 — увидите Вам примерно 27 лет. Значение currentYear задано вручную, поэтому расчёт приблизительный; получать текущий год из системы — отдельная тема, здесь её не разворачиваем.
Объявленная, но не проинициализированная переменная (int x; без значения) до присвоения хранит мусор — случайное содержимое памяти. Читать её до записи — классическая ошибка новичка, дающая непредсказуемый результат. Всегда либо задавайте начальное значение, либо заполняйте переменную до первого чтения.
Шаг 4. const и auto
Год, который не должен меняться, лучше защитить от случайной перезаписи. Для этого есть const:
const int currentYear = 2025; // изменить нельзя, попытка = ошибка компиляции
Ещё одно удобство современного C++ — auto: компилятор сам выведет тип из значения справа.
auto price = 199.99; // компилятор понимает: это double
auto label = "скидка"; // а это строковый литерал
Новичку с auto стоит быть осторожным: когда тип виден явно, код читается легче. Начинайте с явных типов, а auto используйте, когда тип очевиден из контекста.
Если не получилось
Самые частые ошибки при первых запусках и что они означают.
'std' has not been declaredилиcout was not declared— забыли#include <iostream>или префиксstd::. Проверьте заголовок и напишитеstd::cout, а не простоcout.expected ';' before ...— пропущена точка с запятой в конце предыдущей строки. C++ требует;после каждого оператора.'name' was not declared in this scope— используете переменную, которую не объявили, или опечатались в имени. C++ различает регистр:ageиAge— разные имена.invalid conversion/ несовпадение типов — пытаетесь положить строку вintили перепутали кавычки у символа. Сверьте тип переменной и то, что в неё кладёте.- Программа собралась, но выводит мусор или огромное число — читаете неинициализированную переменную. Задайте ей значение при объявлении.
Что делать дальше
Переменные — фундамент, дальше идут операции над ними. Следующие шаги по нарастанию:
- условия
if/else— программа принимает решения по значению переменной; - циклы
forиwhile— повторение действий; - функции — вынесение логики в переиспользуемые блоки;
- области видимости — где переменная живёт и когда исчезает.
Заведите привычку собирать код с флагами -Wall -Wextra (g++ -std=c++17 -Wall -Wextra main.cpp -o app) — компилятор начнёт предупреждать о подозрительных местах, включая чтение неинициализированных переменных, ещё до запуска. За справкой по типам и синтаксису держите под рукой cppreference.
Проверка рекламы на риски: Что в макете вызовет вопросы ФАС: превосходные степени, сравнения, обещания результата, маркировка.
Спросить за 40 ₽Источники: cppreference — Variables and objects, cppreference — Fundamental types
Частые вопросы
У меня стоит старый компилятор без C++17. Код заработает?
Скомпилировал, но программа сразу закрывается, ничего не видно. Что делать?
В чём разница между int и double, если оба хранят числа?
Обязательно писать std:: перед cout и cin каждый раз?
Кириллица в выводе печатается кракозябрами. Как исправить?
Нужно ли объявлять все переменные в начале функции, как в старых учебниках?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.