Utilizzare le funzioni inline (forzare in linea se lo si intende veramente) e attenersi ad esso! Ciò sarà più efficiente (si ottiene solo se è in linea se offre prestazioni se si ottimizza per il perf) e se è mantenibile. Si perde molto usando le macro: digitare controllo sicurezza &.
Le macro non esistono per il compilatore, funzionano solo per il preprocessore. Questo fa sostituire il testo senza cercare effetti collaterali. Quindi le macro non vengono mai chiamate e non è possibile eseguirne il debugging. Non importa come si codifica una macro, l'uso improprio è sempre possibile. Come in questo esempio:
#define SQUARE(a) ((a)*(a))
nota già la (
`) 'per la protezione contro le sostituzioni come SQUARE (3 + 2).Ma non proteggono da:
int a = 1;
int b = SQUARE(++a);
Ci si aspetterebbe che fosse 4 ma si finisce con 6 che non è proprio quadrato. Come si espande a int b = (++a)*(++a);
Non avresti questo problema con le funzioni inline.
Si noti che l'implementazione di una funzione inline deve essere visibile per il compilatore nei punti in cui viene utilizzata. Anche il debugging sarà strano per l'utente inesperto: poiché ci sono molte istanze di una funzione inline, otterrai un enorme elenco di metodi se, ad esempio, vuoi spostare il punto di esecuzione in un altro posto.
Ho detto che le macro sono molto complicate? Mi piacerebbe espandere solo uno o due livelli, non tutte le macro (altrimenti è chiaramente illeggibile) ... durante il debug. – liori
Sì, fa schifo, ma non c'è una buona soluzione che io conosca. Di solito devo fare un po 'di hacking quando faccio questo, o manualmente sostituendo il codice me stesso solo per ottenere i livelli che voglio o per tutto il file tramite un file completamente preelaborato. –
@JimBuck Non riesco a trovare 'Genera file preelaborato' in Visual Studio 2013. – sami1592