【发布时间】:2017-04-06 23:34:30
【问题描述】:
在 GCC 中,如果使用 weak 属性声明变量,并且在(静态)链接时没有找到定义,则该变量将具有地址 零,即,如果用变量的地址初始化指针,则指针为NULL,如下面的sn-ps代码所示:
foobar.c:
extern int foo __attribute__((weak));
extern int bar;
int *a[] = {&foo, &bar};
main.c:
#include <diag/Trace.h>
//int foo;
int bar;
extern int *a[];
int main(void) {
trace_printf("%p, %p", a[0], a[1]);
return 0;
}
输出为:0, 0x20000120 (我使用的是 arm-none-eabi-gcc 5.4.1)
问题是:虽然行为是预期的,但没有文件提到它。谁能指出我解释这种行为的任何材料?谢谢!
【问题讨论】:
标签: c gcc linker attributes weak