Tôi có một chức năng static inline
định nghĩa trong một tập tin H, và tại một thời điểm nào đó trong một file C, tôi gán một con trỏ đến chức năng, một cái gì đó như thế này:C: Con trỏ trỏ tới nội tuyến chức năng
foo.h :
static inline void frobnicate(void) {
// frobs something.
}
foo.c
#include "foo.h"
void execute(void (*func)(void)) {
func();
}
void blahBlahBlah(void) {
execute(frobnicate);
}
bar.c
#include "foo.h"
// ...
frobnicate();
Vì vậy, tôi nghĩ điều gì sẽ xảy ra ở đây là trình biên dịch sẽ chuyển nội dung cuộc gọi đến frobnicate
từ bar.c, nhưng trong foo.c, nó sẽ thực sự phải tạo một hàm để triển khai frobnicate
, để nó có thể hoạt động con trỏ đến nó.
Có ai có thể xác nhận nếu hiểu biết của tôi là chính xác không và sửa tôi bằng cách khác?
* Bạn * có thể xác nhận bằng cách đọc mã được tạo. Tôi không nghĩ rằng có một cách cụ thể trong đó * này có * để làm việc. Tôi sẽ không ngạc nhiên nếu trình biên dịch đi "ai đó muốn địa chỉ này, vì vậy chúng ta không inline nó, sau đó". – unwind
Hãy nhớ rằng 'inline' chỉ là _suggestion_ đối với trình biên dịch –