Skip to the content.

1. Il compilatore C e le flag

Il compilatore cc può essere eseguito con diverse flag (opzioni) che ne modificano il comportamento.

Visualizzare l’assembly

Usando la flag -S:

cc -S programma.c

il compilatore non produce un eseguibile, ma genera il codice assembly corrispondente al programma C. Questo permette di vedere cosa viene prodotto internamente durante la compilazione.

Ottimizzazione

È possibile abilitare l’ottimizzazione con flag come:

cc -O2 programma.c

-O2 indica un livello di ottimizzazione intermedio (più veloce del codice non ottimizzato, ma senza eccessivi compromessi).


2. Il preprocessore

Prima della vera compilazione, il codice C viene analizzato da un altro programma chiamato preprocessore.

Cos’è una direttiva del preprocessore?

Una direttiva è un’istruzione che:

Esempio:

#include <stdio.h>

Questa non è una istruzione C, ma una direttiva del preprocessore.


3. La direttiva #include

La direttiva:

#include <stdio.h>

dice al preprocessore di:

A cosa serve stdio.h?

stdio.h contiene:

Senza includerlo, il compilatore non sa come è fatta printf().


4. Header file (.h)

L’estensione .h significa Header.

Gli header contengono solitamente:

Esempio:

#include <stdio.h>

È anche possibile includere file locali:

#include "file.c"

(anche se non è una buona pratica: di solito si includono .h, non .c).


5. Il prototipo di printf

Il prototipo di printf (da man 3 printf) è:

int printf(const char *restrict format, ...);

Questo prototipo:

Domanda importante

Se includessi solo questo prototipo al posto di stdio.h, funzionerebbe?

Sì, funzionerebbe: il compilatore avrebbe le informazioni necessarie per compilare il codice.

Ma non è consigliato, perché:


6. Riassunto rapido