А>Какая между ними разница(unspecified и undefined)?
Различается несколько вариантов поведения программ, выходящего за рамки стандарта: undefined, unspecified и implementation-defined.
Implementation-defined behavior (1.3.5)
Самый мягкий вариант. Поведение программы при корректных входных данных носит четко определенный характер, но зависит от реализации, при этом документация, поставляемая с транслятором обязана содержать описание варианта, выбранного в данной реализации.
Unspecified behavior (1.3.13)
Почти то же, что implementation-defined, но реализация вольна не содержать в документации соответствующего описания.
Undefined behavior (1.3.12)
Самый неприятный вариант. Стандарт не накладывает никаких ограничений на программу, выполнение которой приводит к неопределенному поведению. Может проявляться самым разнообразным образом: от мистических "падений" программы и/или порчи программой данных и/или параметров окружения (включая страшилки о форматировании винчестера), до непредсказуемого поведения транслятора при обработке данной программы: от выдачи "нормальной" диагностики до внутренних ошибок транслятора и т.п.
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен