0Pricing
C Academy · Lezione

Costanti #define

Utilizzi costanti del preprocessore.

Costanti #define è una lezione C Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C Academy include 4 lezioni in totale.

Cosa fa #define

#define è una direttiva del preprocessore che crea una macro: un nome che il preprocessore sostituisce con del testo prima della compilazione.

Viene usata comunemente per assegnare un nome leggibile a un valore fisso, come la dimensione di un buffer o un limite.

#define MAX_LEN 256

Sostituzione testuale

Una macro è una pura sostituzione testuale. Ogni volta che compare MAX_LEN, il preprocessore vi scrive al posto 256.

Non ci sono né un tipo né memoria: l'operazione avviene prima che il compilatore veda il codice.

#include <stdio.h>
#define MAX_LEN 256
int main(void) {
    printf("%d\n", MAX_LEN);
    return 0;
}

Niente punto e virgola

Un errore comune consiste nel terminare un #define con un punto e virgola.

Il punto e virgola diventa parte del testo di sostituzione e può causare errori difficili da comprendere. Lo ometta.

#define PI 3.14159     /* correct */
#define BAD 10;        /* wrong: semicolon is substituted too */

Definire una costante float

Le macro funzionano con qualsiasi valore letterale, inclusi quelli in virgola mobile.

Qui PI viene sostituito nella formula dell'area ogni volta che viene usato.

#include <stdio.h>
#define PI 3.14159
int main(void) {
    double r = 2.0;
    printf("%.2f\n", PI * r * r);
    return 0;
}

Macro per le dimensioni degli array

Le macro vengono spesso usate per dimensionare gli array, perché il valore deve essere noto al momento della compilazione.

Usare un nome mantiene la dimensione in un unico punto e ne facilita la modifica.

#include <stdio.h>
#define SIZE 5
int main(void) {
    int data[SIZE] = {1, 2, 3, 4, 5};
    printf("%d\n", data[SIZE - 1]);
    return 0;
}

Metta sempre le espressioni tra parentesi

Se una macro si espande in un'espressione, la inserisca tra parentesi.

Senza parentesi, la precedenza degli operatori può cambiare il significato quando la macro viene usata all'interno di un'espressione più ampia.

#define WIDTH (4 + 2)   /* good */
#define BADW 4 + 2       /* risky: 10 * BADW becomes 10*4+2 */

Perché le parentesi sono importanti

Questo programma mostra la differenza. Con le parentesi WIDTH viene moltiplicato nella sua interezza; senza parentesi viene moltiplicata solo una parte.

La versione sicura stampa 60, mentre l'espansione non sicura calcolerebbe un valore diverso.

#include <stdio.h>
#define WIDTH (4 + 2)
int main(void) {
    printf("%d\n", 10 * WIDTH);
    return 0;
}

Macro di stringa

Le macro possono anche rappresentare valori letterali di tipo stringa, una soluzione utile per messaggi fissi o nomi di versione.

Il testo viene sostituito esattamente, comprese le virgolette.

#include <stdio.h>
#define APP_NAME "CoddyKit"
int main(void) {
    printf("Welcome to %s\n", APP_NAME);
    return 0;
}

#define e const

Una macro non ha né un tipo né un indirizzo; una variabile const possiede entrambi e rispetta l'ambito.

Preferisca const quando desidera la sicurezza dei tipi e una migliore visibilità durante il debugging. Usi #define per le costanti necessarie al momento della compilazione, come le dimensioni degli array.

#define M_SIZE 10
const int c_size = 10;

Rimuovere definizioni e protezioni

È possibile rimuovere una macro con #undef. Le macro permettono inoltre di creare le protezioni degli header, che impediscono l'inclusione ripetuta.

Questo mostra il modello classico di protezione usato all'inizio dei file header.

#ifndef CONFIG_H
#define CONFIG_H
/* header contents here */
#endif

Convenzioni per i nomi

Per una convenzione consolidata da tempo, i nomi delle macro sono scritti in MAIUSCOLO_CON_UNDERSCORE.

Questo le identifica visivamente come costanti del preprocessore e aiuta a evitare conflitti con i normali nomi delle variabili.

#include <stdio.h>
#define BUFFER_SIZE 1024
int main(void) {
    printf("%d\n", BUFFER_SIZE);
    return 0;
}

Verifica rapida

Verifichi la Sua comprensione delle macro.

Riepilogo

#define crea macro che il preprocessore sostituisce come testo, senza tipo, punto e virgola o memoria.

Metta le espressioni tra parentesi e preferisca const per i valori con sicurezza dei tipi, riservando le macro alle esigenze di compilazione come le dimensioni degli array e le protezioni degli header.

Domande Frequenti

La lezione «Costanti #define» è gratuita?

Sì — il testo completo di «Costanti #define» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C Academy, passa a CoddyKit PRO. Il corso C Academy include 4 lezioni in totale.

Cosa imparerò in «Costanti #define»?

Utilizzi costanti del preprocessore. Eserciti C Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C Academy?

Non è richiesta alcuna esperienza precedente. C Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Costanti #define»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C Academy?

Sì. Ogni lezione C Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Definire enum
  2. Valori e intervalli degli enum
  3. Variabili const
  4. Costanti #define
← Torna a C Academy