我正在尝试编写一个传递给函数以用作分配参数的函数;它应该接受类型为的任何有效分配器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)
标准版本的行为方式不相同是有原因的吗?
如果我从命令行启动一个新的 Python 交互式会话,则会出现一些控制台功能,例如使用箭头键访问上一个命令等。
但是,如果相反,我使用code.interact()从较大的脚本内部启动交互式会话,则无法正确处理转义序列 - 例如,按 ? 键打印^[[A而不是显示上一个命令。如何启用此功能?