相关疑难解决方法(0)

覆盖C库函数,调用原始函数

我对这段代码的工作方式和原因感到有些困惑.在我参与过的任何项目中,我都没有遇到过这种情况,我甚至都没想过会自己做.

override_getline.c:

#include <stdio.h>

#define OVERRIDE_GETLINE

#ifdef OVERRIDE_GETLINE
ssize_t getline(char **lineptr, size_t *n, FILE *stream)
{
    printf("getline &lineptr=%p &n=%p &stream=%p\n", lineptr, n, stream);
    return -1; // note: errno has undefined value
}
#endif
Run Code Online (Sandbox Code Playgroud)

main.c中:

#include <stdio.h>

int main()
{
    char *buf = NULL;
    size_t len = 0;
    printf("Hello World! %zd\n", getline(&buf, &len, stdin));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

最后,示例编译并运行命令:

gcc main.c override_getline.c && ./a.out
Run Code Online (Sandbox Code Playgroud)

使用OVERRIDE_GETLINEdefine,调用自定义函数,如果注释掉,则调用普通库函数,并且两者都按预期工作.

问题

  1. 这个的正确用语是什么?"覆盖","阴影",还有什么?

  2. 这是gcc特定的,或POSIX,还是ANSI C,甚至是未定义的?

  3. 如果函数是ANSI C函数或(如此处)POSIX函数,它会有什么不同吗?

  4. 调用覆盖函数在哪里?通过.o相同链接中的其他文件,至少,我也假设.a文件也添加到链接命令.如何使用-l链接器的命令行选项添加静态或动态库?

  5. 如果可能,如何从覆盖的getline调用getline的库版本?

c gcc

14
推荐指数
1
解决办法
1万
查看次数

重载free()所以我的程序使用我的而不是系统的

我需要重新编写free()func用于教育目的,它也必须命名free().

当我重命名我的功能时,myfree()它完美地工作但是当我命名它时free(),程序不知道他是否需要使用我的或系统的所以程序Segmentation fault(core dumped)即使我不调用我的自由(只是声明另一个free()功能似乎崩溃了)

那我怎么能告诉编译器使用我的而不是系统?

提前谢谢你.

编辑:Linux操作系统

c linux malloc free

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

标签 统计

c ×2

free ×1

gcc ×1

linux ×1

malloc ×1