8.11.18 Weak Variable Attribute
The weak attribute causes the declaration to be emitted as a
weak symbol. A weak symbol indicates that if a global version of the same
symbol is available, that version should be used instead.
weak is applied to a reference to an external symbol, the
symbol is not required for linking. For
example:extern int __attribute__((weak)) s;
int foo() {
if (&s) return s;
return 0; /* possibly some other value */
}In the above program, if s is not defined by some other module,
the program will still link but s will not be given an
address. The conditional verifies that s has been defined
(and returns its value if it has). Otherwise '0' is
returned. There are many uses for this feature, mostly to provide generic
code that can link with an optional library.
