17.2.35 Weak Function Attribute

The weak attribute indicate that a symbol is weak, which means that if another version of the same symbol is available, that version should be used instead. This is useful when a library function is implemented such that it can be overridden by a user written function. For example:
void __attribute__ ((weak)) foo(void);