是否有可能用我自己的方法覆盖<string.h>中的strdup?

时间:2018-07-08 15:37:47

标签: c gcc googletest glibc

我需要这样做是因为我应该将此功能存根用于单元测试。

我正在使用gcc版本5.4.0。

对于glibc中存在的许多其他功能(如memcpy),我只是在.c文件中编写了实现,然后使用了该实现而不是原始的实现,但是在strdup和某些其他功能的情况下,我得到了像这样的编译错误:

error: expected identifier or ‘(’ before ‘__extension__’
 char* strdup (const char *__s)

我知道这是因为我试图使用string.h中已经存在的函数名称,尽管它也可以与它们中的其他一些函数一起使用。我想知道是否有可能绕过这个问题。

1 个答案:

答案 0 :(得分:4)

在您的情况下,看起来原始strdup是一个预处理器宏,而不是实际的函数。您可以尝试摆脱它:

#undef strdup
char *strdup(const char *s) {
    // your code goes here
}