В чем разница между именем и переменной в C

#c #variables

Вопрос:

В соответствии с проектом ISO C (2020) 6.1 (Основы) :

Имя-это использование идентификатора (5.10), идентификатора функции-оператора (12.6), идентификатора оператора-литерала (12.6.8), идентификатора функции преобразования (11.4.7.2) или идентификатора шаблона (13.3), который обозначает сущность или метку (8.7.5, 8.2).


Каждое имя, обозначающее сущность, вводится объявлением. Каждое имя, обозначающее метку, вводится либо оператором goto (8.7.5), либо оператором с меткой (8.2).

Переменная вводится объявлением ссылки, отличной от нестатического элемента данных или объекта. Имя переменной, если таковое имеется, обозначает ссылку или объект

Имя может обозначать сущность, поэтому оно может обозначать объект и в этом случае вводится объявлением. Переменная может быть введена объявлением объекта и в этом случае обозначает объект. Если я не ошибаюсь, определения имени и переменной выглядят очень похожими. В чем разница между именем и переменной? (Особенно в случае, если есть пересечение, например, когда они обозначают объект)

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

1. У переменной есть имя, но у других вещей (например, функций и классов) тоже есть имя. И эти другие вещи не являются переменными.

2. Ссылки имеют имя, но не являются объектами. Объекты могут иметь или не иметь названия.

3. … и у конструкторов нет имен.

4. Это не говорит о том, что переменная обозначает объект; это говорит о том, что имя переменной означает.

5. @Римские переменные-это один из видов сущностей. Или, более конкретно, переменные-это классификация, состоящая из объектов и некоторых ссылок, которые являются обоими видами сущностей.

Ответ №1:

В чем разница между именем и переменной?

Наиболее очевидное (основанное на вашей первой цитате) различие заключается в том, что имя является более общим, чем переменная. У каждой переменной есть имя, но не каждое имя относится к переменной. Существуют также имена функций, классов, операторов и шаблонов. (Это не полный список.)

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

(Особенно в случае, если есть пересечение, например, когда они обозначают объект)

Я рассматриваю это как нечто философское. Давайте рассмотрим аналогичную ситуацию: в чем разница между вашим именем и вами самим? Ты больше, чем просто имя? И все же, чтобы идентифицировать вас, другие используют ваше имя.

Для переменных это не так уж и отличается. У переменной есть имя. Это имя используется для обозначения переменной, часто рассматриваемой как переменная. И все же переменная-это больше, чем просто имя; у нее также есть тип и значение. Имя само по себе не определяет тип и значение, но из соображений удобства оно часто используется таким образом, когда речь идет о коде. (В подавляющем большинстве случаев это не так уж плохо.)

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

1. Чтобы быть педантичным, не у каждой переменной есть имя. Рассмотрим безымянные аргументы функции и аргументы в пакете параметров.

Ответ №2:

Я бы сказал, что переменная имеет две вещи: имя и значение.
Что касается имен: переменные могут иметь имена, но также и функции, классы,…

Таким образом, переменная-это элемент, принадлежащий миру C (и множеству других языков программирования).
Имя-это свойство многих элементов, таких как переменные, но также и других.