小编l k*_*l k的帖子

构造指向alloca的函数指针会导致链接器错误?

我正在尝试编写一个传递给函数以用作分配参数的函数;它应该接受类型为的任何有效分配器void *(*)(size_t)。但是,在尝试alloca用作分配器时,我遇到奇怪的行为-构造指向该alloca函数的函数指针可以正常编译,但会导致链接器错误:

#include <stdlib.h>
#include <alloca.h>

int main() {
  void *(*foo)(size_t) = alloca;
}
Run Code Online (Sandbox Code Playgroud)

结果是

/tmp/cc8F67yC.o: In function `main':
test15.c:(.text+0x8): undefined reference to `alloca'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

这与内联的alloca有关吗?但是当函数不需要地址时,不会仅作为优化来进行内联。实际上,使用GCC,我什至可以编写自己的版本,该版本可以在上述代码中正常运行:

static inline void *alloca(size_t n) {
  return __builtin_alloca(n);
}
Run Code Online (Sandbox Code Playgroud)

标准版本的行为方式不相同是有原因的吗?

c function-pointers alloca

3
推荐指数
2
解决办法
83
查看次数

使用 code.interact 启用控制台功能

如果我从命令行启动一个新的 Python 交互式会话,则会出现一些控制台功能,例如使用箭头键访问上一个命令等。
但是,如果相反,我使用code.interact()从较大的脚本内部启动交互式会话,则无法正确处理转义序列 - 例如,按 ? 键打印^[[A而不是显示上一个命令。如何启用此功能?

python console

0
推荐指数
1
解决办法
703
查看次数

标签 统计

alloca ×1

c ×1

console ×1

function-pointers ×1

python ×1