🚀 Nuova versione beta disponibile! Feedback o problemi? Contattaci

Esercizi Preprocessori in C

Codegrind TeamJul 12 2024

Ecco degli esercizi semplici con soluzione per praticare l’uso dei preprocessori in C.

Esercizio 1: Definire una Costante

Utilizzare il preprocessore per definire una costante.
#include <stdio.h>

#define PI 3.14159

int main() {
    printf("Il valore di PI è: %f\n", PI);
    return 0;
}

Esercizio 2: Macro con Parametri

Definire una macro con parametri per calcolare il quadrato di un numero.
#include <stdio.h>

#define QUADRATO(x) ((x) * (x))

int main() {
    int num = 5;
    printf("Il quadrato di %d è: %d\n", num, QUADRATO(num));
    return 0;
}

Esercizio 3: Inclusione Condizionale

Utilizzare le direttive di inclusione condizionale per includere un header file.
#include <stdio.h>

#define USA_LIB1

#ifdef USA_LIB1
#include "lib1.h"
#else
#include "lib2.h"
#endif

int main() {
    funzione();
    return 0;
}

lib1.h

void funzione() {
    printf("Funzione da lib1\n");
}

lib2.h

void funzione() {
    printf("Funzione da lib2\n");
}

Esercizio 4: Prevenire Doppie Inclusioni

Utilizzare le direttive del preprocessore per prevenire doppie inclusioni di un header file.

file.h

#ifndef FILE_H
#define FILE_H

void funzione();

#endif

file.c

#include "file.h"
#include <stdio.h>

void funzione() {
    printf("Funzione definita in file.c\n");
}

int main() {
    funzione();
    return 0;
}

Esercizio 5: Macro per Debugging

Utilizzare una macro per il debugging.
#include <stdio.h>

#define DEBUG 1

#if DEBUG
    #define DBG_PRINT(x) printf("DEBUG: %s\n", x)
#else
    #define DBG_PRINT(x)
#endif

int main() {
    DBG_PRINT("Questo è un messaggio di debug");
    printf("Programma principale\n");
    return 0;
}

Esercizio 6: Concatenazione di Token

Utilizzare una macro per concatenare token.
#include <stdio.h>

#define CONCATENA(x, y) x##y

int main() {
    int xy = 10;
    printf("Il valore di xy è: %d\n", CONCATENA(x, y));
    return 0;
}

Esercizio 7: Stringificazione di Token

Utilizzare una macro per trasformare un token in una stringa.
#include <stdio.h>

#define STRINGA(x) #x

int main() {
    printf("Token come stringa: %s\n", STRINGA(Ciao, mondo!));
    return 0;
}

Esercizio 8: Macro Variadica

Utilizzare una macro variadica per stampare più valori.
#include <stdio.h>

#define STAMPA(fmt, ...) printf(fmt, __VA_ARGS__)

int main() {
    STAMPA("Valori: %d, %f, %s\n", 10, 3.14, "Ciao");
    return 0;
}

Esercizio 9: Definizione Condizionale di Macro

Definire una macro in modo condizionale.
#include <stdio.h>

#if !defined(VALORE)
    #define VALORE 100
#endif

int main() {
    printf("Il valore è: %d\n", VALORE);
    return 0;
}

Esercizio 10: Compilazione Condizionale

Utilizzare direttive di preprocessore per la compilazione condizionale.
#include <stdio.h>

#define VERSIONE 2

int main() {
    #if VERSIONE == 1
        printf("Versione 1 del programma\n");
    #elif VERSIONE == 2
        printf("Versione 2 del programma\n");
    #else
        printf("Versione sconosciuta\n");
    #endif
    return 0;
}