PDA

View Full Version : [C] Macro?!


17Qwerty71
10-12-2005, 18:04
Ma le macro sono le funzioni definite tramite il define?
Che differenza c'è definendo funzioni in questo modo e quali i vantaggi\svantaggi?
:confused:


Grazie :)

andbin
10-12-2005, 18:28
Ma le macro sono le funzioni definite tramite il define?
Che differenza c'è definendo funzioni in questo modo e quali i vantaggi\svantaggi?
Ciao, intanto le macro non sono funzioni. ;)
La direttiva #define permette di associare ad un identificativo una sequenza di caratteri in modo che ogni volta che viene incontrato l'identificativo, viene espanso nella sequenza definita.

Si possono usare le macro per definire semplici valori:

#define MIO_NOME "Andrea"
#define MIA_NASCITA 1973

oppure per definire operazioni più complesse:

#define CUBO(x) ((x)*(x)*(x))

Vantaggi delle macro rispetto alle funzioni:
- Vengono espanse nel punto richiesto, non c'è quindi overhead nella chiamata a funzione.

Svantaggi delle macro rispetto alle funzioni:
- bisogna fare attenzione agli "effetti collaterali" nella definizione della macro.
- non sono tipizzate.

Altro adesso non mi viene in mente. :D

17Qwerty71
10-12-2005, 18:47
Ciao, intanto le macro non sono funzioni. ;)
La direttiva #define permette di associare ad un identificativo una sequenza di caratteri in modo che ogni volta che viene incontrato l'identificativo, viene espanso nella sequenza definita.

Si possono usare le macro per definire semplici valori:

#define MIO_NOME "Andrea"
#define MIA_NASCITA 1973

oppure per definire operazioni più complesse:

#define CUBO(x) ((x)*(x)*(x))

Vantaggi delle macro rispetto alle funzioni:
- Vengono espanse nel punto richiesto, non c'è quindi overhead nella chiamata a funzione.

Svantaggi delle macro rispetto alle funzioni:
- bisogna fare attenzione agli "effetti collaterali" nella definizione della macro.
- non sono tipizzate.

Altro adesso non mi viene in mente. :D

E io che pensavo fossero macro solo le funzioni definite con il define :muro:
Ma quindi le funzioni macro vengono caricate in memoria con il vantaggio di essere più veloci? :confused:

andbin
10-12-2005, 20:09
Ma quindi le funzioni macro vengono caricate in memoria con il vantaggio di essere più veloci? :confused:
Riprendiamo l'esempio che ho fatto della macro CUBO:
#define CUBO(x) ((x)*(x)*(x))
Se hai un codice come:
int a=3;
int b;

b = CUBO(a);

il compilatore "vedrebbe" il sorgente esattamente come se fosse:
int a=3;
int b;

b = ((a)*(a)*(a));

Ogni volta che usi una macro, essa viene espansa.

17Qwerty71
11-12-2005, 01:03
E overhead cosa sarebbe? :confused:

andbin
11-12-2005, 10:48
E overhead cosa sarebbe? :confused:
Questo link ti potrà "illuminare" ;)

http://it.wikipedia.org/wiki/Overhead

17Qwerty71
11-12-2005, 12:44
Questo link ti potrà "illuminare" ;)

http://it.wikipedia.org/wiki/Overhead
Grazie :)