如何取消定义库函数以使用我的同一函数版本。请注意,我需要包含同一文件的其他函数的头文件。所以不包括不是一个选择。有没有什么方法可以不改名字就可以使用呢?
urz*_*eit 10
您可以执行以下操作:
#define function_name function_name_orig
#include <library.h>
#undef function_name
int function_name() {
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
这样,函数将不会由标头定义,因为它将被替换为function_name_orig. 头文件中 getter 或 setter 的实现可能会继续工作 - 即使它们使用function_name,因为这些调用也将被替换。
Mji*_*iig -3
对于 gcc,#undef 似乎可以解决这个问题,只要您为该函数保留相同的原型即可。例如:
#include <stdio.h>
#undef scanf
int scanf(const char * s, ...)
{
printf(s);
return 0;
}
int main()
{
scanf("hello\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用 -Wall 进行编译时不会发出警告,但如果您希望 scanf 有(例如)的原型,void scanf(void)它将给出错误。