2012-03-25 57 views
5

tôi đã kết thúc việc đặt nhiều chức năng nội tuyến nhỏ trong một tệp tiêu đề mà tôi đưa vào trong nhiều đơn vị biên dịch, mã được trình biên dịch chính xác và chương trình hoạt động như một nét duyên dáng.tiêu đề đầy đủ các hàm nội tuyến, tôi có thể di chuyển mã bên ngoài tệp tiêu đề và vẫn nội tuyến mọi thứ không?

nhưng bây giờ các tập tin tiêu đề là cái gì đó rất không bình thường (cho là một tập tin header), để làm cho nó dễ đọc hơn tôi nghĩ phải làm một cái gì đó như thế này:

#ifndef MY_HEADER_H 
#define MU_HEADER_H 

static inline 
void my_fnct (my_param a); 

#include "my_header.inline.c" 

#endif 

và file my_header.inline.c sẽ như thế nào:

static inline 
void my_fnct (my_param a) 
{ 
    // .. my code .. 
} 

khi đó, khi tôi muốn các chức năng này, tôi chỉ bao gồm tệp tiêu đề.

câu hỏi của tôi là: có cách nào tốt hơn để thực hiện việc này mà không làm đầy tệp tiêu đề có quá nhiều mã? hoặc tôi có thể làm điều này và mong đợi các nhà phát triển khác hiểu mã này mà không gặp vấn đề gì?

+1

Sự cố với chức năng nội tuyến trong tiêu đề là gì? chức năng nội tuyến phải rất ngắn, một lớp lót, thực sự. – littleadv

+1

Đối với hiệu suất mã, điều duy nhất làm thế nào bạn có thể thấy nếu vấn đề này là đo lường. Sự chậm lại của trình biên dịch của bạn với tất cả các công cụ bao gồm là gì? Kinh nghiệm của tôi là những thứ như vậy không đáng kể với các trình biên dịch hiện đại. Và không đáng để gặp phải hàng trăm tùy chọn cấu hình mà bạn dễ dàng trộn lẫn. –

Trả lời

1

Không, bạn không thể. Tuy nhiên, bạn có thể sử dụng tính năng Tối ưu hóa thời gian liên kết của GCC (sau đó một số cuộc gọi có thể được gạch chân, ngay cả khi hàm không được khai báo inline và không có sẵn trong tiêu đề cho mọi đơn vị biên dịch), ví dụ: biên dịch và liên kết với gcc -flto (điều này yêu cầu trình biên dịch GCC gần đây, ví dụ: ít nhất là 4.6 và làm chậm thời gian xây dựng).

1

Thực tiễn mà tôi không thích là trích xuất các hàm nội tuyến vào một tệp riêng biệt với phần mở rộng .inl. Đây chỉ là quy ước và bạn có thể đặt tên cho tệp bất cứ điều gì bạn thích. Tôi có một IDE mà gấp mã vì vậy tôi chỉ có thể ẩn những thứ tôi không muốn nhìn thấy hơn là có một tập tin riêng biệt.

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