2010-07-09 92 views

Trả lời

17

Macros được xử lý bởi các tiền xử lý - các tiền xử lý không thay thế văn bản trong tập tin nguồn của bạn, thay thế tất cả các lần xuất hiện của 'A' với nghĩa đen 8.

Constants được xử lý bởi trình biên dịch. Họ có thêm lợi ích của loại an toàn.

Đối với mã được biên dịch thực tế, với bất kỳ trình biên dịch hiện đại nào, sẽ không có sự khác biệt về hiệu suất giữa hai.

+1

'không nên có sự khác biệt hiệu suất giữa hai' - Cảm ơn bạn đã làm cho nó rất rõ ràng. Trước khi tôi đọc trong một cuốn sách tồi tệ mà tôi có nói rằng sau này là chậm hơn so với sử dụng vĩ mô. –

+0

Nhưng việc sử dụng macro đôi khi có thể tăng kích thước của tệp đối tượng. Giả sử bạn có một chuỗi rất lớn được lưu trữ trong macro, bộ xử lý trước sẽ thay thế tất cả sự xuất hiện của chuỗi này bằng giá trị của nó trước khi biên dịch, dẫn đến tệp đối tượng tương đối lớn hơn. – shashwat

1

Đối với một điều, là người đầu tiên sẽ làm cho tiền xử lý để thay thế tất cả các lần xuất hiện của A với 8 trước khi trình biên dịch không bất cứ điều gì trong khi thứ hai không liên quan đến tiền xử lý

1

Bạn có thể viết

#define A 8 
int arr[A]; 

nhưng không phải

const int A = 8; 
int arr[A]; 

nếu tôi nhớ lại quy tắc một cách chính xác.

+2

Không, cả hai sẽ hoạt động. – Michael

+1

@Michael: Không, ít nhất là không sử dụng gcc. "foo.c: 2: error: variably modified 'arr' tại phạm vi tệp" – swegi

+0

Bạn đúng. Tôi đã bỏ lỡ thẻ C trên câu hỏi. Những gì tôi nói đúng với C++. – Michael

5

Hằng số do Macro xác định được thay thế bằng bộ tiền xử lý. Hằng số 'biến' được quản lý giống như các biến thông thường.

Ví dụ, đoạn mã sau:

#define A 8 
int b = A + 10; 

sẽ xuất hiện để trình biên dịch thực tế như

int b = 8 + 10; 

Tuy nhiên, mã này:

const int A = 8; 
int b = A + 10; 

sẽ xuất hiện như:

const int A = 8; 
int b = A + 10; 

:)

Trong thực tế, điều chủ yếu nhất thay đổi là phạm vi: các biến liên tục tuân theo các quy tắc Phạm vi tương tự như biến chuẩn trong C, có nghĩa là họ có thể bị hạn chế, hoặc có thể định nghĩa lại, trong một khối cụ thể, mà không nó bị rò rỉ - nó tương tự như tình huống biến cục bộ so với biến toàn cầu.

Các vấn đề liên quan