Nếu tôi không khai báo hàm f như được gạch chân. Chỉ cần như sau:chức năng tự động được gạch chân trên các đơn vị dịch và gcc 4.6
Ah:
X f(Y y);
A.cpp:
X f(Y y)
{
...
}
Sau đó, trong một đơn vị dịch thuật khác nhau:
B.cpp:
#include "A.h"
Z g(W w)
{
...
... f(...) ...
...
}
Sau đó tôi biên dịch hai đơn vị dịch thuật A.o và B.o với gcc 4.6, và sau đó liên kết chúng cũng thông qua gcc. (Có thể với -O3 cho cả hai bước)
Gcc sẽ xem xét nội tuyến chức năng cho hiệu suất tại thời gian liên kết? Hoặc là nó quá muộn?
Trong một đánh giá mã, ai đó đã đề xuất rằng tôi không nên khai báo các chức năng của tôi dưới dạng nội tuyến vì trình biên dịch biết rõ hơn tôi làm khi vào nội tuyến. Tôi đã luôn luôn theo ấn tượng, trừ khi chức năng được xác định trong tiêu đề hơn trình biên dịch không có tùy chọn để inline nó.
(Nếu câu trả lời khác nhau cho chế độ C, C++ chế độ, hoặc gnu ++ 0x chế độ xin vui lòng chỉ này ra cũng)
Tại sao bạn muốn làm một điều như vậy? 'inline' chỉ được phát minh cho điều đó. Nó cho phép bạn có định nghĩa của hàm trong tệp tiêu đề mà không có lỗi "nhiều biểu tượng được xác định". Và nó hoạt động khá tốt hiện nay, trình biên dịch có chiến lược tốt khi có hiệu quả nội tuyến một chức năng hay không. –
@JensGustedt: Tại sao? Sự lười biếng. Tôi muốn rằng trình tối ưu hóa tìm ra khi tốt nhất để inline một hàm, giống như cách nó tính toán khi đặt một biến cục bộ trong một thanh ghi thay vì trên stack. Tôi nghĩ đây là một cái nhìn không gây tranh cãi, và bạn đã bỏ lỡ vấn đề. –
Hm, đó là chính xác những gì tôi đã nói. Cho trình biên dịch cơ hội để làm điều đó cho bạn. 'inline' không có nghĩa là bất kỳ điều gì khác ngoài việc yêu cầu trình biên dịch thực hiện nó khi nó thích hợp. Để ở lại với ví dụ của bạn, một biến cục bộ là hoàn toàn có thể nhìn thấy tại điểm mà trình biên dịch quyết định giữ nó trong sổ đăng ký hoặc tràn nó. Viết mã sạch, và trình biên dịch sẽ được tốt đẹp với bạn. Và thành thực mà nói, tại sao việc định nghĩa hàm trong tệp tiêu đề khó khăn hơn trong một .c? Chính xác cùng một văn bản ở một địa điểm khác? –