C -GCC弱属性在变量声明上



在gcc中,如果用属性声明变量,并且在(静态)链接时间中,找不到定义,则该变量将具有地址 Zero ,即,如果用变量的地址初始化指针,则指针将为 null ,如以下代码段所示:

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 (我正在使用无臂-EABI-GCC 5.4.1)

问题是:尽管预期行为,但没有提及它。谁能指出我解释这种行为的任何材料?谢谢!

我不认为我希望,我认为GCC会做同样的事情,就像不存在弱属性一样。文档是:

https://gcc.gnu.org/onlinedocs/gcc/common-function-attributes.html#common-function-atributes

...所以这看起来像是无证件/未定义的行为。

相关内容

  • 没有找到相关文章

最新更新