我想允许重新定义已在头文件中定义的 .c 文件中的函数。根据关于 weakref 属性的 GCC 手册:
效果相当于将所有对别名的引用移动到单独的翻译单元,将别名重命名为别名符号,将其声明为弱,编译两个单独的翻译单元并在它们上执行可重新加载的链接。
这听起来正是我想做的。但是,以下示例编译时不会出错:
tpp.c:18:13: 错误: 'foo' 的重新定义 tpp.c:6:13: 注意: 'foo' 的先前定义在这里
#include <sys/types.h>
#include <stdio.h>
/* this will be in a header file */
static void foo(void) __attribute__ ((weakref ("_foo")));
static void _foo(void)
{
printf("default foo\n");
}
/* in a .c file #including the header mentioned above */
#define CUSTOM_FOO
#ifdef CUSTOM_FOO
static void foo(void)
{
printf("user defined foo.\n");
}
#endif
int main(int argc, char **argv)
{
printf("calling foo.\n");
foo();
}
我正确使用它吗?我错过了什么?
gcc 版本 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)