Урок 16. Ключевые слова и идентификаторы в С++

  Юрий Ворон  | 

    | 

  Обновлено 9 Окт 2018  | 

 14244

 ǀ   14 

C++ имеет зарезервированный набор из 84 слов (включая С++14) для собственного использования. Эти слова называются ключевыми словами (keywords), каждое из них имеет свое особое значение.

Вот список всех ключевых слов в C++ (включая C++14):

alignas **
alignof **
and
and_eq
asm
auto
bitand
bitor
bool *
break
case
catch
char
char16_t **
char32_t **
class
compl
const
constexpr **
const_cast *
continue
decltype
default
delete
do
double
dynamic_cast *
else
enum
explicit *
export *
extern
false *
float
for
friend
goto
if
inline
int
long
mutable *
namespace *
new
noexcept **
not
not_eq
nullptr **
operator
or
or_eq
private
protected
public
register
reinterpret_cast *
return
short
signed
sizeof
static
static_assert **
static_cast *
struct
switch
template
this
thread_local **
throw
true *
try
typedef
typeid *
typename *
union
unsigned
using *
virtual
void
volatile
wchar_t *
while
xor
xor_eq

* — слова с одной звездочкой были добавлены в C++98. Некоторые учебники или справочники могут их пропускать.

** — слова с двумя звездочками были добавлены в C++11. Если ваш компилятор не поддерживает C++11, то они могут не работать.



C++11 также добавил два специальных идентификатора: override и final. Они имеют разные значения в разных контекстах.

Вы уже сталкивались с некоторыми ключевыми словами, в том числе с int, void и return. Вместе с набором операторов, keywords определяют весь язык C++ (не включая команд препроцессора). Поскольку они имеют особые значения, то для их выделения ваша IDE изменит их цвет (обычно на синий).

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

Идентификаторы

Идентификатор – это имя переменной, функции, класса или другого объекта в C++. C++ дает возможность называть идентификаторы любыми именами, которыми вы только захотите. Тем не менее, есть несколько общих правил, которые необходимо соблюдать:

  Идентификатор не может быть ключевым словом. Ключевые слова зарезервированы.

  Идентификатор может состоять только из букв (нижнего или верхнего регистра), цифр или символов подчеркивания. Это означает, что все символы (кроме подчеркивания) и пробелы — запрещены.

  Идентификатор должен начинаться с буквы (нижнего или верхнего регистра) или с подчеркивания. Он не может начинаться с цифры.

  C++ различает нижний и верхний регистр. nvalue отличается от nValue и отличается от NVALUE.

Теперь, когда вы знаете, как можно называть объекты, давайте поговорим о том, как их нужно называть.

Во-первых, в C++ имена переменных начинаются с буквы в нижнем регистре. Если имя переменной состоит из одного слова, то всё должно быть записано в нижнем регистре.

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

Имена идентификаторов, которые начинаются с заглавной буквы, используются для структур, классов и перечислений (всё из этого мы рассмотрим несколько позже).

Если имя переменной или функции состоит из нескольких слов, то есть два варианта: разделить подчеркиванием или использовать CamelCase (несколько слов пишутся слитно, без пробелов, и каждое новое слово пишется с заглавной буквы). CamelCase (в переводе «ВерблюжийСтиль») получил такое название из-за заглавных букв, которые напоминают горбы верблюда.

Хотя даже стандартная библиотека C++ использует символ подчеркивания для переменных и функций, мы же мы будем использовать CamelCase — для наилучшей читабельности кода. Иногда вы будете видеть сочетание двух способов: подчеркивание для переменных и CamelCase для функций.



Стоит отметить, что если вы работаете с чужим кодом, то хорошей практикой будет придерживаться стиля, в котором написан этот код, даже если он не соответствует нашим рекомендациям.

Во-вторых, не начинайте ваши имена с символа подчеркивания, так как такие имена уже зарезервированы для ОС, библиотеки и/или используются компилятором.

В-третьих, и это, пожалуй, самое важное правило из всех – используйте в качестве идентификаторов только те имена, которые реально описывают то, чем является объект. Очень характерно для неопытных программистов сокращать имена переменных, дабы сэкономить время при наборе кода или потому, что они думают, что всё будет понятно и так. В большинстве случаев это является ошибкой. В идеале, переменные нужно называть так, чтобы человек, который первый раз увидел ваш код, понял как можно скорее, что этот код делает. Через 3 месяца, когда вы будете пересматривать свои программы, вы забудете, как они работают, и потом будете благодарны самому себе за то, что называли переменные по сути, а не как попало. Чем сложнее код, тем проще и понятнее должны быть идентификаторы.

int ccount Плохо Никто не знает, что такое ccount
int customerCount Хорошо Теперь понятно, что мы считаем
int i Плохо* В большинстве нетривиальных случаев — плохо, в простых примерах — может быть (например, в циклах)
int index 50/50 Хорошо, если очевидно, что индексом чего является i
int totalScore Хорошо Всё понятно
int _count Плохо Не начинайте имена переменных с подчеркивания
int count 50/50 Хорошо, если очевидно, что мы считаем
int data Плохо Какой тип данных?
int value1, value2 50/50 Может быть трудно понять разницу между ними
int numberOfApples Хорошо Всё понятно
int monstersKilled Хорошо Всё понятно
int x, y Плохо* В большинстве нетривиальных случаев — плохо, в простых примерах — может быть (например, в математических функциях)

*Примечание: Использовать тривиальные имена для переменных, которые имеют тривиальное использование — можно (например, для переменных цикла, в простых математических функциях и т.д.).

В-четвертых, уточняющий комментарий всегда будет только плюсом. Например, мы объявили переменную с именем numberOfChars, которая должна хранить число символов определенной части текста. Сколько символов в тексте «Hello, World!»: 10, 11, 12 или 13? Это зависит от того, учитываем ли мы пробелы и знаки препинания или нет. Вместо названия переменной numberOfCharsIncludingWhitespaceAndPunctuation лучше написать хороший комментарий, который прояснит ситуацию:

Тест

Какие из переменных неправильно названы и почему?

  int result;

  int _oranges;

  int NUMBER;

  int the name of a variable;

  int TotalCustomers;

  int void;

  int countFruit;

  int 4orYou;

  int kilograms_of_pipe;

Ответ

  int _oranges. Имена переменных не должны начинаться с подчеркивания.

  int NUMBER. Имена переменных должны начинаться с буквы в нижнем регистре.

  int the name of a variable. Имена переменных не могут содержать пробелы.

  int TotalCustomers. Имена переменных должны начинаться с буквы в нижнем регистре.

  int void. void — это ключевое слово и его нельзя использовать в качестве идентификатора для своих переменных или функций.

  int 4orYou. Имена переменных не могут начинаться с цифр.

Переменные result, countFruit и kilograms_of_pipe соответствуют правилам.

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (204 оценок, среднее: 4,92 из 5)
Загрузка...

Комментариев: 14

  1. Данила:

    Вы пишите что нельзя использовать ключевые слова в названиях функций. Но я видел как у вас в примере использовалось слово = ретурн . Оно слово ключевое . какое этому объяснение ?
    int return7() — вот этот пример из урока 12.

  2. Юрий Юрий:

    Сайт с которого ведется перевод указан на странице «Уроки С++» в самом конце страницы — LearnCpp.com

  3. Александр:

    Добрый день!
    Уроки действительно интересны и доходчиво изложены! Спасибо!
    Я сам программист 1С (около 5 лет) и мне захотелось научиться писать доработки для 1С в виде внешних dll компонент.
    Есть краткий гайд на инфостарте, но он для MS Visual C++ 6.0 — infostart.ru/public/16916/
    А вот для Visual C++ 2017 не разобрался как создать.
    Нужно, чтобы на выходе получилась DLL с некоторой функцией (например генератор случайных чисел), к которой можно обратиться из вне. Чтобы получилось ее зарегистрировать через regsvr32.exe.
    Если есть возможность ткните носом, где и что изучить надо?

    1. Юрий Юрий:

      Привет. Честно, не сталкивался с подобным. Спросите на stackoverflow или Тостере.

      1. Александр:

        Ясно.
        А как там на stackoverflow затусить?
        Что это за портал такой? Просто форум с ответами на вопросы или что-то большее?
        Не могли бы вы рассказать в паре статей какие ресурсы сильно облегчают жизнь программистам C++ например.
        1. Что за stackoverflow и есть ли русскоязычный аналог?
        2. До недавнего времени не знал, что есть онлайн-компиляторы, пока один из пользователей вашего сайта не отписался в комментариях о выполненном задании.
        onlinegdb.com — Тоже очень интересный ресурс: получается можно и код отладить и скинуть ссылку на него?
        3. Чем еще можно пользоваться? Есть ли какие-нибудь mind-map для запоминания основных операторов?
        4. Есть ли мобильные приложения, облегчающие изучение/работу в среде C++?
        5. И вообще хотелось бы увидеть конкретную работу: Например взять какой-то мини-проект трудоемкостью на 1-2 часа. (есть такие на фриланесе или не бывает??) Выложить его техническое задание и по шагам реализацию проекта.
        Т.е. после вашего пособия каков примерный уровень программиста C++ будет и можно ли браться за какую-то работу или нужно углубляться в какие-то области?

        1. Юрий Юрий:

          Спасибо за столь ценный и развернутый комментарий.

          1. Есть русский ресурс вопросов/ответов в сфере ИТ — Тостер. Но есть и русская версия StackOverflow — ru.stackoverflow.com.

          2. Есть onlinegdb, есть еще сервис Pastebin для хранения и распространения кода (но это не компилятор C++).

          3-4-5. Насчет mind-map и мобильных приложений пока что ничего не могу посоветовать. Насчет конкретного проекта — эта мысль давно уже крутится в голове. Можно будет сделать. Но на это всё нужно время и ресурсы.

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

        2. Александр:

          По поводу ресурсов — у вас даже нет кнопки типа "поддержать проект". Непорядок =))
          Все отзывы у вас в основном положительные, я думаю многие не против будут отблагодарить авторов.
          По поводу мотивации — я думаю интересно многим будет увидеть реальный проект, который из урока в урок будет обрастать новыми подробностями.
          Например создание мини-игры (насколько можно это реализовать — не знаю) Перемещение фигуры по экрану. Т.е. что-то, что можно будет пощупать в результате прохождения доброй половины курса.
          А еще лучше скомпилировать эту мини-игру под андроид. Я думаю желающих у вас прибавится.

        3. Юрий Юрий:

          Как я уже говорил, для этого нужно время и ресурсы (здесь упор больше на приложенные усилия). Я еще не закончил перевод этого курса по C++ и сразу перебегать на второй цикл статей, не закончив предыдущий — это просто того не стоит. В будущем можно будет что-то придумать. Пока что нужно довести первое дело до конца.

          P.S. Если будут желающие поделиться своим опытом разработки каких-либо проектов и напишут цикл статей об этом раньше, чем я закончу перевод уроков — без проблем, опубликую.

  4. Erding:

    Очень нравятся уроки, поскольку всё понятно описано даже для людей, знакомых с этим достаточно плохо.
    Я хотел спросить совета у Вас:
    В свои 15-ть лет, я безумно хочу обучиться программированию на языке C++. Читаю абсолютно все Ваши уроки полностью, а также прочитал весь курс введения. Но часто, я просыпаюсь с мыслью, что я опять забыл тот или иной код. Я нахожу свободное время, сажусь, снова перечитываю урок, записываю это где-нибудь, но не могу выйти на более-менее автоматический режим. (Без заметок, подсказок.) Это, иногда, попросту угнетает, отбивая при этом желание продолжать.
    Подскажите, пожалуйста, что нужно делать, для лучшего запоминания информации, которую я получаю с Ваших уроков?

    1. Li4ik Li4ik:

      Помнить всё и не нужно. Сомневаюсь, что есть программисты, которые запоминают всю, однажды полученную, информацию раз и на всю жизнь. Это нормально, всё не выучишь и не запомнишь. Главное — понять суть, получить базис (фундамент) знаний, а всё остальное — это практика. Ведь для создания программы Вам нужно реализовать теорию, т.е. написать код, исходя из своих знаний. Отсюда и вытекает факт, что для лучшего запоминания чего-либо — нужно это применить на практике. Прочитали урок — применили на практике. Хорошим вариантом будет написания своей программы или игрушки (небольшой, простенькой), можно попробовать найти на YouTube видео-уроки в стиле «Как написать/создать игру на С++» и повторять код. А если Вы забыли какой-то термин, понятие или правило, то это не страшно — зашли в Интернет, перечитали, вспомнили. И, как уже было сказано, всё не выучишь и не запомнишь, а практическое применение знаний — самый лучший вариант запоминания информации.

  5. Сергей:

    По мере продвижения по уроках с++ , количество оценок заметно
    уменьшылось.

    1. Li4ik Li4ik:

      Далеко не все продолжают учиться, мотивация кончилась, так всегда 🙂

      1. Андрей:

        А некоторые "на автомате" продолжают упорно не замечать кнопок оценки 🙂
        Ибо привыкли, что потребуют регу (в результате которой почту завалят спамом (бедные мои спамоприемники)), какие-нибудь репосты или вообще вылезет/попытается вылезти очередная ужасная реклама какого-нибудь мыла/яндекса… о_о
        В общем пойду проголосую за все статьи, что прочитал 🙂 Надеюсь это кому-то важно 🙂
        Ну и да, спасибо за перевод. Коротко и понятно 🙂

        1. Юрий Ворон Юрий Ворон:

          В некоторых вообще могут быть блокираторы оценок и кнопок шеринга — и их тоже можно понять. Спасибо, что читаете 🙂

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

telegram канал
RAVESLI