typestar

Límites y desbordamiento en C

Cada tipo entero tiene un rango; cruzarlo envuelve o es comportamiento indefinido.

#include <limits.h>
#include <stdio.h>

int safe_add(int a, int b, int *out) {
    if (b > 0 && a > INT_MAX - b) {
        return 0;
    }
    if (b < 0 && a < INT_MIN - b) {
        return 0;
    }
    *out = a + b;
    return 1;
}

void limits(void) {
    printf("int %d..%d\n", INT_MIN, INT_MAX);
    printf("unsigned max %u\n", UINT_MAX);

    unsigned char wraps = 255;
    wraps++;
    printf("wrapped to %u\n", wraps);

    int result = 0;
    printf("%d\n", safe_add(INT_MAX, 1, &result));
}

Cómo funciona

  1. <limits.h> nombra los límites de cada tipo.
  2. La aritmética sin signo envuelve; el desbordamiento con signo es comportamiento indefinido.
  3. Verifica antes de sumar, no después.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
25
Caracteres a escribir
431
Tokens
139
Ritmo de tres estrellas
80 tpm

Al ritmo de tres estrellas de 80 tokens por minuto, este intento toma unos 104 segundos.

Escribe este fragmento

Paso 6 de 7 en Variables y tipos; paso 6 de 35 en Fundamentos del lenguaje.

← Anterior Siguiente →