Tôi đang làm việc bằng ngôn ngữ C và sửa đổi mã trước đó được viết bởi người khác. Tôi đang đấu tranh với một vài điều và tôi đang cố gắng hiểu càng nhiều càng tốt về những gì đang diễn ra như tôi có thể. Vì vậy, như câu hỏi của tôi đã nêu, sự khác biệt giữa static inline void
và void
khi tạo một hàm là gì? Tôi xin lỗi trước cho bài viết dài, nhưng tôi muốn bạn biết tôi đã làm một số nghiên cứu, nhưng không hiểu những gì tôi đã tìm thấy.Sự khác biệt giữa khoảng trống nội tuyến tĩnh và khoảng trống là gì?
tôi thấy an explanation of static
gây bối rối cho tôi:
Từ khoá tĩnh nghĩa rằng chức năng không thể được tham chiếu từ các tập tin khác; nghĩa là tên không được xuất bởi người liên kết.
Bằng cách đọc này, tôi giả sử tham chiếu một hàm khác với gọi hàm? Tôi cho rằng vì hàm này được gọi từ một tệp .c khác. Nếu đó là trường hợp, những gì đang tham chiếu một chức năng?
Thông qua cùng một trang web, chúng giải thích inline functions và tôi không hiểu ý nghĩa của nó.
Từ khóa __inline yêu cầu trình biên dịch thay thế mã trong phạm vi định nghĩa hàm cho mọi trường hợp của cuộc gọi hàm. Tuy nhiên, thay thế chỉ xảy ra theo quyết định của trình biên dịch. Đối với ví dụ , trình biên dịch không inline một hàm nếu địa chỉ của nó là được thực hiện hoặc nếu nó quá lớn để nội tuyến.
Huh ???
Bất kỳ trợ giúp nào được đánh giá cao và tôi một lần nữa xin lỗi vì bài đăng dài khủng khiếp.
Sau đây tọa lạc tại file1.c (Sử dụng tên chung như tôi không nghĩ rằng nó quan trọng)
COMPLEX cNoiseSample;
CGauss(&cNoiseSample, loopbackRadio->pState);
Sau đây tọa lạc tại file2.c
static inline void CGauss(COMPLEX * pcGauss, P_OS_UNIFORM_RAND_STATE pState)
{
//code
}
Ngoài ra, 'inline' là cần thiết để thực thi quy tắc một định nghĩa khi hàm được xác định trong tiêu đề được bao gồm trong các đơn vị biên dịch khác nhau (hoặc ít nhất đây là trường hợp cho C++, không biết chi tiết này chính xác trong C, I tưởng tượng nó sẽ giống nhau) – rubenvb
Tôi đoán tôi hơi bối rối hơn @ Graham-Borland. Để tôi cho bạn thấy lý do: COMPLEX cNoiseSample; CGauss (& cNoiseSample, loopbackRadio-> pState);/* Mã này được gọi tại một điểm trong tệp nguồn .c và trong tệp nguồn .c khác tôi có: */static inline void CGauss (COMPLEX * pcGauss, P_OS_UNIFORM_RAND_STATE pState)/* Tôi xin lỗi vì định dạng kém trong hộp nhận xét, không chắc chắn cách thực hiện việc này. */ – TZPike05
Chỉnh sửa câu hỏi của bạn, dán đoạn mã đó vào đó. –