Quando si utilizza una macro, il codice dietro si espande tutto alla stessa linea di codice sorgente, per quanto riguarda il debugger è interessato. Il debugger vede MY_MACRO(), e tratta quella singola riga indipendentemente da quanto il codice sia realmente all'interno della macro.
In C++, i modelli possono fare la maggior parte delle cose che le macro possono, ma funzionano molto, molto più elegante. Dal momento che sono una parte reale della lingua, puoi inserirli anche con il debugger! Per esempio:
// Macro FIND() - ugly, buggy, and can't ever be stepped in to by debugger!
#define FIND(begin, end, value) \
{ \
for (; begin != end; ++begin) { \
if (*begin == value) \
break; \
} \
}
// Templated find() - works beautifully and can be debugged like a real function!
template<typename Iter, typename T>
Iter find(Iter begin, Iter end, const T& value)
{
for (; begin != end; ++begin) {
if (*begin == value)
return begin;
}
}
Nota: find() è, naturalmente, una funzione di libreria standard, ma ho semplicemente scritto questo per confrontarlo con una macro, per dimostrare come può essere il debug. Per non parlare della versione macro ha molti altri problemi. Regola generale: evitare le macro per scrivere il codice quando possibile!
Poiché questo è il più vicino a quello che potrei fare per il mio problema, accetto questa risposta. – Alphaneo