Stałe zdefiniowane makro są zastępowane przez preprocesor. Stałe "zmienne" są zarządzane tak jak zwykłe zmienne.
Na przykład, następujący kod:
#define A 8
int b = A + 10;
wydaje się rzeczywisty kompilator jako
int b = 8 + 10;
Jednak ten kod:
const int A = 8;
int b = A + 10;
wydaje się jako:
const int A = 8;
int b = A + 10;
:)
W praktyce najważniejsze, że zmienia się zakres: zmienne ciągłe przestrzegać same zasady dotyczące zakresu zmiennych standardowych jak w C, co oznacza, że mogą one być ograniczone, lub ewentualnie na nowo, w określonym bloku, bez wyciek - jest podobny do sytuacji zmiennych lokalnych i globalnych.
"Powinna istnieć zerowa różnica w wydajności między tymi dwoma elementami" - Dziękuję za uczynienie tego tak czytelnym. Zanim jeszcze przeczytam w nieszczęsnej książce, mam taką, która mówi, że ta ostatnia jest wolniejsza niż użycie makra. –
Jednak używanie makr może czasami zwiększać rozmiar pliku obiektowego. Załóżmy, że masz bardzo duży ciąg zapisany w makrze, pre-procesor zastąpi całe wystąpienie tego ciągu przez jego wartość przed kompilacją, co spowoduje stosunkowo większy plik obiektowy. – shashwat