4.7.2.8 Weak 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.
When the
weak attribute 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(void) {
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.
