На тесте мне задали вопрос
Give a definition of a variable
Я ответил:
A named location in memory.
Учитель отметил мой ответ как неправильный и сказал, что мне нужно добавить, что переменные могут меняться.
Я не думаю, что учитель здесь прав, поскольку «константы» - это пример переменной, которую нельзя изменить, и вопрос задается только для общего определения термина.
Какое настоящее определение?
«Именованное место в памяти». больше похоже на объект.
@chux: объекту не обязательно иметь имя.
Слово «переменная» или «изменяемый» указывает на то, что она может варьироваться или изменяться. В этом смысле учитель прав. «Именованной ячейки памяти» недостаточно. Метка в исполняемом коде также отмечает «именованную ячейку памяти», а именно, куда может перейти выполнение кода.





Этот вопрос помечен тегом C, но стандарт C не определяет «переменную». В том смысле, о котором спрашивают, стандарт 2018 использует это слово в основном в ненормативных примечаниях, примерах и сносках. Те немногие места, где он используется в нормативном тексте, относятся к дополнительным языковым функциям, добавленным позже (например, потокам и атомарным объектам), и я не рассматриваю их использование в качестве надежной информации о значении.
В стандарте то, что обычно считается переменными, действительно описывается через «объекты» (области хранения) и «идентификаторы» (имена). В этом плане ваш ответ правильный.
Однако нам неизвестен контекст вашего класса. Возможно, он включал обсуждение термина «переменная», и это обсуждение могло определить его как то, что требуется вашему учителю для теста.
Исторически переменные представляли собой объекты, значения которых можно было изменять, и поэтому они были названы. Эволюция языков программирования, чтобы иметь постоянные объекты, произошла позже, что привело к некоторому конфликту между историческим названием и текущим использованием. Я полагаю, что это одна из причин, почему стандарт C перешел от «переменной» к «объекту» и «идентификатору». Настаивать на использовании этого термина только в его историческом значении является чрезмерно жестким, если только это не было явным определением, представленным в курсе.
ISO / IEC9899: 2017 (N2176) §6.7 / 5:
A declaration specifies the interpretation and attributes of a set of identifiers. A definition of an identifier is a declaration for that identifier that:
— for an object, causes storage to be reserved for that object;
Таким образом, для
Give a definition of a variable
отвечая
int foo;
будет достаточно.
Это было бы правильной интерпретацией вопроса теста в другом контексте, но ответ учителя, как указано в вопросе, дает понять, что это не предполагаемая интерпретация. Учитель хотел объяснить значение слова, а не пример. Между прочим, «достаточно» - это не стандартный английский, по крайней мере, в Соединенных Штатах. «Достаточно» - обычное дело.
Из Википедия о Переменная и его определение:
In computer programming, a variable or scalar is a storage location (identified by a memory address) paired with an associated symbolic name (an identifier), which contains some known or unknown quantity of information referred to as a value. The variable name is the usual way to reference the stored value, in addition to referring to the variable itself, depending on the context.
This separation of name and content allows the name to be used independently of the exact information it represents. The identifier in computer source code can be bound to a value during run time, and the value of the variable may thus change during the course of program execution.
Например, здесь
int input = 10; /* definition of variable input */
В приведенном выше инициализация (объявление с присвоением) переменной input, есть некоторая память, зарезервированная для input в самом время компиляции где-то в разделе куча первичной памяти баран. И тут
const int input = 10; /* definition of variable input */
input - это постоянная переменная, то есть не могу изменить это напрямую, но все же это Переменная, то есть он может что-то содержать, поэтому он занимает место в оперативной памяти первичной памяти.
Определение не обязательно приводит к тому, что значение находится где-то в памяти.
@ J.Doe: Вопрос помечен тегом C. Согласно C 2018 6.7 5 определение идентификатора - это объявление, которое «для объекта приводит к резервированию памяти для этого объекта…»
В языке C такое понятие как «переменная» не определяется, поэтому в контексте C ответ состоит в том, что он не определен или определен тем, кто пишет / обсуждает C и использует его для обозначения чего-то конкретного для своего контекста.
Самым близким к «переменной» в C является «объект», и он определен в 3.5:
1 object
region of data storage in the execution environment, the contents of which can represent values2 NOTE When referenced, an object may be interpreted as having a particular type; see 6.3.2.1.
В C некоторые объекты имеют квалификацию const, что может лишить их права быть «переменными» в глазах некоторых / многих людей, использующих язык. С другой стороны, объекты с квалификацией const не ведут себя как константы, которые можно использовать в постоянные выражения; скорее, они похожи на все другие объекты, за исключением того, что любая попытка изменить их значения приводит к неопределенному поведению.
Обратите внимание, что слово «переменная» действительно встречается в стандарте несколько раз, в основном в контексте «переменных аргументов» (stdarg.h) или «массивов переменной длины» / «изменяемых типов». Однако он также неофициально используется в ряде примеров и примечаний, а также в некотором нормативном тексте, предположительно для ссылки на объекты, но без определения.
Настоящее определение в вашем конкретном случае - «какое бы определение ни использовал ваш учитель», потому что, вероятно, он примет только это;)