Почему преобразование «целого числа вне диапазона в целое» приводит к IB, а преобразование «целого числа вне диапазона в целое» приводит к UB?

Последующий вопрос для:

  1. Преобразование типов: двойное в char: несколько вопросов
  2. Назначение беззнакового значения знаковому символу

Контекст: рабочий проект ISO / IEC 9899: 202x (E) — 5 февраля 2020 г. C17..C2x N2479 (курсив добавлен):

J.3 Поведение, определяемое реализацией, J.3.5 Целые числа

— Результат или сигнал, вызванный преобразованием целого числа в целочисленный тип со знаком, когда значение не может быть представлено в объекте этого типа (6.3.1.3).

6.3.1.4 Действительное число с плавающей запятой и целое число

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

Вопрос: Почему преобразование «целого числа вне диапазона в целое» приводит к IB, а преобразование «целого числа вне диапазона в целое» приводит к UB? Т.е. почему поведение непоследовательно (например, IB в обоих случаях)?

UPD. Ответ пользователя P.P. в дублируется вопрос:

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

Определяемое реализацией поведение не ограничивается стандартом, но каждая реализация должна предоставлять документацию о том, что происходит на этой конкретной платформе. Это конкретное правило даже явно указывает, что многие реализации будут вызывать сигнал. Это сильно отличается от заданного реализацией result или value, в которых стандарт по-прежнему полностью определяет все побочные эффекты, и только результирующее значение может отличаться. Неопределенное поведение не ограничивается стандартом, и также нет требований к документации.   —  person pmor    schedule 11.03.2021

Unspecified (result / value) — это не требующий документации аналог для результата / значения, определенного реализацией.   —  person pmor    schedule 11.03.2021

@BenVoigt, Как stackoverflow.com/questions/ 2397984 / отвечает на вопрос? Вопрос не в определении IB / UB. Речь идет об отсутствии согласованности: IB в случае «вне диапазона целого числа в целое», UB в случае выхода из диапазона с плавающей запятой в целое число ».   —  person pmor    schedule 11.03.2021

Согласен, проголосовали за повторное открытие.   —  person pmor    schedule 14.03.2021

@BenVoigt: В C89 поведение было определено для всех реализаций без битов заполнения или представлений ловушек, но определенное поведение не обязательно было разумным в реализациях с дополнением до единиц или знаковой величиной. C99 перехарактеризовал его и добавил положение, отсутствующее в C89, позволяющее реализациям подавать сигнал, но на практике почти ни одна реализация не пользуется свободой подавать сигнал.   —  person pmor    schedule 15.03.2021

Источник: ledsshop.ru

Стиль жизни - Здоровье!