2010-07-09 7 views

Odpowiedz

17

Makra są obsługiwane przez preprocesor - pre-procesor robi zastępowania tekstu w pliku źródłowym, zastąpienie wszystkich wystąpień „A” z dosłownym 8.

Stałe są obsługiwane przez kompilator. Dodatkową zaletą jest bezpieczeństwo typu.

Dla rzeczywistego skompilowanego kodu, przy użyciu dowolnego nowoczesnego kompilatora, różnica między tymi dwoma wartościami powinna być zerowa.

+1

"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. –

+0

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

1

Z jednej strony, pierwszy spowoduje preprocesora zastąpić wszystkie wystąpienia z 8 przed kompilator ma nic natomiast drugi nie wiąże preprocesora

1

można napisać

#define A 8 
int arr[A]; 

ale nie, jeśli poprawnie przywołuję reguły.

+2

Nie, oba będą działać. – Michael

+1

@Michael: Nie, przynajmniej nie, jeśli używany jest gcc. "foo.c: 2: error: zmiennie zmodyfikowany" arr "w zakresie pliku" – swegi

+0

Masz rację. Brakowało mi tagu C w pytaniu. To, co powiedziałem, jest prawdziwe w C++. – Michael

5

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.

Powiązane problemy