📢 Nuovo Corso Laravel API disponibile!

Esercizi Preprocessori in C

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;
}