Test de C: 24 preguntas para comprobar lo que sabes

¿Cuánto C sabes de verdad? Estas 24 preguntas repasan las 8 lecciones de nuestro curso de C: compilar con gcc, printf y la entrada, tipos y desbordamientos, control y funciones, arrays y cadenas, punteros, struct y memoria dinámica, archivos y módulos, y las herramientas que encuentran los errores. Elige una respuesta en cada pregunta y pulsa Corregir al final: verás tu nota, los aciertos por lección y la explicación de cada respuesta.

No hace falta registrarse y nada se envía a ningún sitio: el test se corrige en tu propio navegador. Todas las respuestas con código se comprobaron compilando y ejecutando el código con GCC 15.3 (C23).

Pregunta 1Lección 1: Primeros pasos

¿Para qué sirven las opciones -Wall -Wextra de gcc?

Pregunta 2Lección 1: Primeros pasos

¿Qué escribe este programa?

#include <stdio.h>

int main(void)
{
    int avance = 50;
    printf("Llevas el %d%%\n", avance);
    return 0;
}
Pregunta 3Lección 1: Primeros pasos

¿Por qué no se debe leer una línea con gets(linea)?

Pregunta 4Lección 2: Tipos, variables y operadores

¿Qué escribe este programa?

#include <stdio.h>

int main(void)
{
    printf("%d\n", 7 / 2 * 2);
    return 0;
}
Pregunta 5Lección 2: Tipos, variables y operadores

¿Qué escribe este programa?

#include <stdio.h>

int main(void)
{
    unsigned char x = 255;
    x++;
    printf("%d\n", x);
    return 0;
}
Pregunta 6Lección 2: Tipos, variables y operadores

¿Qué escribe este programa?

#include <stdio.h>

int main(void)
{
    double a = 0.1 + 0.2;
    printf("%d\n", a == 0.3);
    return 0;
}
Pregunta 7Lección 3: Control y funciones

¿Qué escribe este programa?

#include <stdio.h>

int main(void)
{
    int x = 0;
    if ((x = 0)) {
        printf("a\n");
    } else {
        printf("b\n");
    }
    return 0;
}
Pregunta 8Lección 3: Control y funciones

¿Qué escribe este programa?

#include <stdio.h>

int main(void)
{
    int n = 1;
    switch (n) {
    case 1:
        printf("uno ");
        [[fallthrough]];
    case 2:
        printf("dos ");
        break;
    case 3:
        printf("tres ");
    }
    printf("\n");
    return 0;
}
Pregunta 9Lección 3: Control y funciones

¿Qué escribe este programa?

#include <stdio.h>

int contar(void)
{
    static int n = 0;
    n++;
    return n;
}

int main(void)
{
    contar();
    contar();
    printf("%d\n", contar());
    return 0;
}
Pregunta 10Lección 4: Arrays y cadenas

¿Qué escribe este programa?

#include <stdio.h>
#include <string.h>

int main(void)
{
    char s[] = "C23";
    printf("%zu %zu\n", sizeof s, strlen(s));
    return 0;
}
Pregunta 11Lección 4: Arrays y cadenas

¿Qué escribe este programa, guardado en UTF-8?

#include <stdio.h>
#include <string.h>

int main(void)
{
    printf("%zu\n", strlen("año"));
    return 0;
}
Pregunta 12Lección 4: Arrays y cadenas

Si respuesta es un char respuesta[10] que contiene "si", ¿qué compara respuesta == "si"?

Pregunta 13Lección 5: Punteros

¿Qué escribe este programa?

#include <stdio.h>

int main(void)
{
    int a = 1, b = 2;
    int *p = &a;
    *p = b;
    p = &b;
    *p = 5;
    printf("%d %d\n", a, b);
    return 0;
}
Pregunta 14Lección 5: Punteros

¿Qué escribe este programa?

#include <stdio.h>

int main(void)
{
    int v[] = {1, 2, 3, 4};
    int *p = v + 1;
    printf("%d %d\n", *p, p[2]);
    return 0;
}
Pregunta 15Lección 5: Punteros

Una función recibe const char *s. ¿Qué puede hacer con él?

Pregunta 16Lección 6: Estructuras y memoria dinámica

¿Qué escribe este programa?

#include <stdio.h>

typedef struct {
    char nombre[16];
    int puntos;
} Jugador;

int main(void)
{
    Jugador a = {"Ana", 10};
    Jugador b = a;
    b.puntos = 99;
    printf("%d %d\n", a.puntos, b.puntos);
    return 0;
}
Pregunta 17Lección 6: Estructuras y memoria dinámica

¿Por qué se escribe tmp = realloc(p, nuevo); if (tmp) p = tmp; en lugar de p = realloc(p, nuevo);?

Pregunta 18Lección 6: Estructuras y memoria dinámica

¿Qué escribe este programa en Linux de 64 bits?

#include <stdio.h>

struct medida {
    char unidad;
    double valor;
};

int main(void)
{
    printf("%zu\n", sizeof(struct medida));
    return 0;
}
Pregunta 19Lección 7: Archivos, módulos y make

Al abrir con fopen(ruta, "w") un archivo que ya existe, ¿qué pasa con su contenido?

Pregunta 20Lección 7: Archivos, módulos y make

Al compilar, el enlazador dice undefined reference to `inventario_total'. ¿Qué significa?

Pregunta 21Lección 7: Archivos, módulos y make

¿Qué significa static delante de una función definida en un .c?

Pregunta 22Lección 8: Un proyecto completo

¿Qué encuentra un programa compilado con -fsanitize=address?

Pregunta 23Lección 8: Un proyecto completo

En el proyecto, ¿qué encontró clang-tidy que ninguna prueba había detectado?

Pregunta 24Lección 8: Un proyecto completo

¿Qué hace la opción -fhardened de GCC 14 y posteriores?

Las preguntas siguen el orden del curso. Si fallas alguna, el enlace de su explicación te lleva a la lección donde se explica con ejemplos.