C 是否可以覆盖<;字符串.h>;用我自己的?

C 是否可以覆盖<;字符串.h>;用我自己的?,c,gcc,googletest,glibc,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中的函

我需要这样做,因为我应该为单元测试存根这个函数

我使用的是gcc版本5.4.0

对于glibc中存在的许多其他函数,如memcpy,我只是在.c文件中编写了实现,然后使用了这个实现,而不是原来的实现,但是对于strdup和其他一些函数,我得到了如下编译错误:

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

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

在您的案例中,原始的
strdup
是一个预处理器宏,而不是实际的函数。您可以尝试摆脱它:

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

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

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

欢迎访问stackoverflow.com。请花些时间阅读,特别是命名和。也请和。最后,请学习如何创建。欢迎访问stackoverflow.com。请花些时间阅读,特别是命名和。也请和。最后,请学习如何创建一个。我刚刚尝试了它,它允许我编译没有错误,但它仍然使用原始实现而不是存根。我也尝试了stub u strdup,但它的作用是一样的。抱歉,它确实起作用了。我还有一个问题导致了分段错误,因为我向“strdup”传递了一个空指针,这让我觉得问题仍然存在。我只是尝试了一下,它允许我编译时没有错误,但它仍然使用原始实现而不是存根。我也尝试过存根uu strdup,但它的作用是一样的。很抱歉,它确实起作用了。我遇到了另一个导致分段错误的问题,因为我向“strdup”传递了一个空指针,所以我认为问题仍然存在。