А>Какая между ними разница(unspecified и undefined)?

Различается несколько вариантов поведения программ, выходящего за рамки стандарта: undefined, unspecified и implementation-defined.

Implementation-defined behavior (1.3.5)

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

Unspecified behavior (1.3.13)

Почти то же, что implementation-defined, но реализация вольна не содержать в документации соответствующего описания.

Undefined behavior (1.3.12)

Самый неприятный вариант. Стандарт не накладывает никаких ограничений на программу, выполнение которой приводит к неопределенному поведению. Может проявляться самым разнообразным образом: от мистических "падений" программы и/или порчи программой данных и/или параметров окружения (включая страшилки о форматировании винчестера), до непредсказуемого поведения транслятора при обработке данной программы: от выдачи "нормальной" диагностики до внутренних ошибок транслятора и т.п.
Автор: Павел Кузнецов    Оценить