构造一个指向alloca的函数指针会导致链接器错误?
发布时间:2020-12-16 10:38:02 所属栏目:百科 来源:网络整理
导读:我试图写一个函数,传递一个函数用于分配作为其参数;它应该接受任何类型为void *(*)(size_t)的有效分配器.但是,当我尝试使用alloca作为分配器时,我遇到了奇怪的行为 – 构建一个指向alloca函数的函数指针编译得很好,但会导致链接器错误: #include stdlib.h#i
我试图写一个函数,传递一个函数用于分配作为其参数;它应该接受任何类型为void *(*)(size_t)的有效分配器.但是,当我尝试使用alloca作为分配器时,我遇到了奇怪的行为 – 构建一个指向alloca函数的函数指针编译得很好,但会导致链接器错误:
#include <stdlib.h> #include <alloca.h> int main() { void *(*foo)(size_t) = alloca; } 结果是 /tmp/cc8F67yC.o: In function `main': test15.c:(.text+0x8): undefined reference to `alloca' collect2: error: ld returned 1 exit status 这与内联的alloca有关吗?但是,当函数不需要具有地址时,不会仅作为优化进行内联.事实上,使用GCC,我甚至可以编写我自己的版本,它在上面的代码中按预期工作: static inline void *alloca(size_t n) { return __builtin_alloca(n); } 有没有理由说标准版本的行为方式不一样? 解决方法
引用
here的手册页:
该页面还提到:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |