ZHCU875Z August 2001 – October 2023 SM320F28335-EP
在执行最终链接后,弱符号引用可能具有定义,也可能没有定义。如果符号未定义,则其地址被视为 0。在尝试使用该变量的内容之前,C/C++ 代码必须检查弱引用的地址,以确保该值不为 0。
extern __attribute__((weak)) unsigned char * foo;
if (&foo != 0)
*foo = 1;
如果对应于 foo 的链接器符号可能没有有效地址(例如,因为该符号包含整数值而非地址),或者可能超出 2GB 范围 PC 相对寻址,请使用 _symval 内置运算符,如下所示:
extern __attribute__((weak)) unsigned char * foo;
if (_symval(&foo) != 0)
*foo = 1;