Подтвердить что ты не робот

Что такое неопределенное значение?

Я нашел это в стандарте c99

3.17.2
1 indeterminate value
either an unspecified value or a trap representation

Это вышеприведенное утверждение мне не ясно. Может ли кто-нибудь объяснить, что это такое и каковы его плюсы и минусы?

Некоторые примеры будут высоко оценены.

4b9b3361

Ответ 1

Дифференциация двух (неопределенные значения и ловушечные представления) является фундаментальной. В одном случае вы не знаете значения. В другом случае вы имеете недопустимое значение.

Самый простой пример неопределенного значения, которое я могу собрать:

int a;
int b = a;

Не существует понятия детерминированного значения, связанного с a. У этого есть что-то (поскольку оно занимает память), но "что" оно имеет, не определено, таким образом, неопределенно. В целом, концепция так же проста, как кажется: если не было решено, что-то есть, она не может быть использована в какой-либо оценке (подумайте, если это поможет) с детерминированными результатами.

Фактическое значение зависит от политик языка, компилятора и управления памятью. Например, в большинстве реализаций C неинициализированная переменная области или память, на которую указывает указатель, возвращаемый вызовом в malloc, будет содержать любое значение, которое ранее было сохранено на этом адресе. С другой стороны, большинство языков сценариев инициализируют переменные для некоторого значения по умолчанию (0, "" и т.д.).

Что касается представления Trap, это, по сути, любое значение, которое находится за пределами ограниченного домена допустимых значений, относящихся к базовому формальному определению. Далее следует, что не путать.

enum FooBar { foo=0, bar=1 };
enum FooBar fb = (enum FooBar)2;

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

Ответ 2

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

Ссылка: WikiPedia