我们可以在C代码文件中使用__attribute__((weak))
声明弱函数。我想知道是否有一种方法可以在编译期间从gcc声明这一点,而不在代码文件中写入任何内容?
例如
文件:foo.h
int foo();
文件:foo.c
#include<stdio.h>
int foo(){
printf("foo called from file\n");
return 1;
}
文件:main.c
#include<stdio.h>
#include"foo.h"
int foo(){
printf("foo called from main");
return 1;
}
int main(){
foo();
return 0;
}
是否可以编译以上代码并从命令行将foo导出为弱代码?
例如gcc --weak=foo.c:foo foo.c main.c
./a.out produces foo called from main.
我知道在__attribute__((weak))
的{{1}}声明上方写上foo()
会在主体中调用foo.c
。
博客:
blog.microjoe.org/2017/unit-tests-c-cmocka-coverage-cmake.html
说有可能这样做。...
有两种声明弱符号的方法:
通过将参数传递给GCC,告诉它将此函数的符号导出为弱符号。
通过在函数实现之前添加属性((弱))注释。
答案 0 :(得分:0)
我会说不,没有这样的选择。
这听起来有点像XY-problem,也许您应该更清楚地说明要解决的问题,而不是要解决的问题。
顺便说一句,您的示例不起作用,因为您提供了两个定义,而没有说哪个应该被认为是弱的。一定是
# Remember this doesn't really work!
$ gcc --weak=foo.c:foo foo.c main.c
之类的东西,即您需要指出弱定义所在的文件。