Phụ thuộc:
Macro được chuyển đổi thành văn bản chương trình bởi trình biên dịch. Họ không đại diện cho bất kỳ điều gì khác ngoài văn bản thay thế chúng, và không sống ngoài thời gian biên dịch (trừ khi ... xem bên dưới).
Biến địa phương và các biến này có thể bị xóa, nếu chúng không có một hàm tạo hoặc trình phá hủy không tầm thường. (Bạn không muốn cái gì đó như scoped_lock
loại bỏ chỉ vì bạn không tham khảo nó sau này trong các mã.) Điều này cũng giữ cho các biến và chức năng với liên kết nội bộ (ví dụ như quy định tại namespace phạm vi với từ khóa static
). Tuy nhiên, trong hầu hết các trường hợp, các tài nguyên cần thiết cho các đối tượng đó là tối thiểu và khoản tiết kiệm không đáng kể.
Các chức năng có một chút khác biệt và phụ thuộc. Một hàm ảo nói chung sẽ được coi là "đã sử dụng" nếu có một cá thể thuộc loại của nó và hầu như chắc chắn sẽ có mặt, ngay cả khi nó không bao giờ được gọi.
Ngoài điều đó (và điều này cũng áp dụng cho các biến toàn cục): đó là tối đa liên kết. Mức độ chi tiết của hầu hết các liên kết là đối tượng tệp kết quả từ việc biên dịch "đơn vị dịch": rằng tệp đối tượng là hoặc không phải là một phần của chương trình của bạn. Nếu bạn yêu cầu trình liên kết kết hợp tệp đối tượng, thì bạn nên tải mọi thứ trong đó. Nếu bạn đặt tệp đối tượng trong thư viện một (tĩnh) và yêu cầu trình liên kết sử dụng, thì liên kết sẽ kết hợp tệp đối tượng vào chương trình của bạn nếu và chỉ nếu nó giải quyết bên ngoài chưa được giải quyết. Nhưng nếu nó kết hợp tệp đối tượng, nó thường sẽ kết hợp tất cả của nó. (Bất kỳ thư viện nào cũng sẽ đặt từng hàm không phải ảo vào một tệp đối tượng riêng biệt, do đó bạn không nhận được nhiều hơn mức bạn cần.)
Về vấn đề này, DLL hoạt động như tệp đối tượng (mặc dù tên ). Nếu bạn liên kết các tập tin đối tượng của bạn vào một DLL, chương trình sử dụng nó sẽ nhận được tất cả các DLL, hoặc không có.
Cuối cùng: mặc dù không phải là một phần của chương trình của bạn, các tệp đối tượng và thực thi cuối cùng sẽ thường chứa thông tin tượng trưng; các hệ thống tốt nhất thậm chí sẽ duy trì thông tin liên quan đến các macro , để trình gỡ lỗi có thể hiển thị mọi thứ theo cách bạn đã viết chúng. (Làm thế nào đến nay nó có thể làm điều này với các macro là gây tranh cãi.)
Nguồn
2013-04-03 09:01:00
GCC luôn ném cảnh báo biến không sử dụng với '-Wall', vì vậy tôi sẽ tưởng tượng như vậy. Các macro – Blender
không liên quan, nhưng hãy xem http://stackoverflow.com/q/6215782/390913 – perreal