4.7.2.6 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.