Проявляют ли целочисленные типы со знаком C99, определенные в stdint.h, четко определенное поведение в случае переполнения?

Все операции на «стандартном» целочисленные типы со знаком в C (short, int, long и т. д.) демонстрируют неопределенное поведение, если они дают результат за пределами интервала [TYPE_MIN, TYPE_MAX] (где TYPE_MIN, TYPE_MAX - минимальное и максимальное целочисленные значения соответственно. которые могут быть сохранены конкретным целочисленным типом.

Однако согласно стандарту C99 все типы intN_t должны иметь представление с дополнением до двух:

7.8.11.1 Целочисленные типы точной ширины
1 . Имя typedef intN_t обозначает целочисленный тип со знаком шириной N, без заполнения. биты и представление с дополнением до двух. Таким образом, int8_t обозначает целое число со знаком тип шириной ровно 8 бит.

Означает ли это, что типы intN_t в C99 демонстрируют четко определенное поведение в случае целочисленного переполнения? Например, четко ли определен этот код?

#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>

int main(void)
{
    printf("Minimum 32-bit representable number: %" PRId32 "\n", INT32_MAX + 1);
    return 0;
}
11
задан Mysticial 24 April 2013 в 09:58
поделиться