2012-05-30 86 views
5

Nếu tôi sử dụng macro trong mã C của tôi, chẳng hạn nhưMacro được lưu ở đâu?

#define var 10 

sau đó nơi chính xác là những lưu trữ trong không gian được phân bổ cho quá trình bằng hạt nhân? Trong heap hoặc BSS hoặc dữ liệu toàn cầu? Hoặc là nó chỉ là một thay thế văn bản cho var trong một trong các trình biên dịch vượt qua?

Trả lời

14

Có.
cuối cùng một

chỉ là một thay thế văn bản

Nó được thực hiện bởi một đường chuyền tiền xử lý. Một số chi tiết tốt có thể được tìm thấy here

+0

Tôi không nghĩ rằng thay thế văn bản khá công bằng. Nó có thể làm việc với các danh sách tham số và như vậy. –

+0

Có. Macro rất hữu ích cho nhiều thứ. Op là một chút mờ về pass cpp. Thay thế văn bản là những gì sẽ xảy ra. – EvilTeach

+0

@AndrewWhite: Trình xử lý tiền xử lý phức tạp, nhưng nó vẫn chỉ thực hiện chuyển đổi văn bản thành văn bản. Ví dụ, trong các hệ thống Unix có thể chạy bộ tiền xử lý riêng biệt với trình biên dịch và thậm chí bạn có thể sử dụng bộ tiền xử lý C cho một số tệp không phải C. – hugomg

4

chỉ thị Preprocessor như #define được thay thế bằng văn bản tương ứng trong giai đoạn tiền xử lý biên soạn, và được (gần như) không bao giờ đại diện trong thực thi chính thức.

0

Đó là hướng dẫn cho trình biên dịch, và do đó được lưu trữ trong các bảng trong không gian của trình biên dịch, không phải là không gian của mã của bạn.

+0

Trình biên dịch không bao giờ nhìn thấy nó. Các tiền xử lý vượt qua ăn nó. – EvilTeach

3

"Macro" là "thời gian biên dịch".

Nó chỉ "thay thế văn bản" mà trình biên dịch thấy - trước khi biên dịch.

Kết quả (trong mã được biên dịch) có thể là tập hợp các hoạt động ... khai báo dữ liệu ... hoặc không có gì cả.

Nhưng chính macro "vĩ mô" là Lịch sử cổ đại sau khi bộ tiền xử lý kết thúc và trước khi quá trình biên dịch thực sự bắt đầu.

0

Macro chỉ là thay thế văn bản. Khi được thay thế, chúng trở thành một phần của mã và do đó được lưu trữ trong CODE SEGMENT.

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