According to the C FAQ, ci sono fondamentalmente 3 metodi pratici di codice "inlining" in C:Pro e contro dei diversi metodi macro funzione/linea in C
#define MACRO(arg1, arg2) do { \
/* declarations */ \
stmt1; \
stmt2; \
/* ... */ \
} while(0) /* (no trailing ;) */
o
#define FUNC(arg1, arg2) (expr1, expr2, expr3)
Per chiarire questo , gli argomenti vengono utilizzati nelle espressioni e l'operatore virgola restituisce il valore dell'ultima espressione.
o
utilizzando la dichiarazione inline
che è supportato come extension to gcc and in the c99 standard.
Il metodo do { ... } while (0)
è ampiamente utilizzato nel kernel di Linux, ma non ho riscontrato gli altri due metodi molto spesso se non del tutto.
Mi riferisco in particolare alle "funzioni" a più istruzioni, non a quelle a singola istruzione come MAX o MIN.
Quali sono i pro e i contro di ciascun metodo, e perché scegliere l'uno rispetto all'altro in varie situazioni?
L'esempio medio non ha molto senso, la macro accetta argomenti denominati arg1 e arg2 e nel corpo macro si usano expr1, expr2 ed expr3 ? – unwind
Ha senso, perché quelli di 'argN' possono essere annidati in sottoespressioni sul lato destro. Come '(arg1^= arg2, arg2^= arg1, arg1^= arg2)', penso. –
A meno che tu non abbia misurato il tuo codice e sappia che devi ottimizzare, non preoccuparti: scrivi le normali funzioni per tutto. – pmg