编译器优化时可能会将一些函数内联展开,导致函数没有地址。以下是两种解决方法:
代码示例:
#include
// 声明为静态函数
static int add(int a, int b) {
return a + b;
}
int main() {
// 使用函数指针传递函数地址
int (*add_ptr)(int, int) = add;
int result = add_ptr(3, 4);
printf("Result: %d\n", result);
return 0;
}
__attribute__((noinline))
关键字:
2.1 在函数声明时使用 __attribute__((noinline))
关键字来告诉编译器不要内联展开该函数。
2.2 编译器将会保持函数的地址。代码示例:
#include
// 声明函数时使用 __attribute__((noinline)) 关键字
int __attribute__((noinline)) add(int a, int b) {
return a + b;
}
int main() {
int result = add(3, 4);
printf("Result: %d\n", result);
return 0;
}
以上两种方法可以确保函数具有地址,以便在需要时能够进行函数调用。