Esercizi Preprocessori in C
Codegrind Team•Jul 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;
}