Symbol słaby (weak symbol)
Definicja, której konsolidator używa tylko wtedy, gdy nie znajdzie innej, „silnej” definicji tej samej nazwy.
GCC i Clang zapisują to jako __attribute__((weak)), a ELF obsługuje to natywnie. Kod wbudowany intensywnie z tego korzysta: pliki startowe CMSIS definiują każdą procedurę obsługi przerwania jako słaby alias do Default_Handler, który po prostu kręci się w nieskończoność. Napisz własne USART1_IRQHandler, a ono wygra; nie napisz żadnego, a przerwanie wyląduje w pętli, zamiast zakończyć konsolidację błędem.
Druga strona medalu: literówka — USART1_IRQhandler — albo zapomniane extern "C" w C++ kompiluje się bez słowa skargi. Program zawiesza się wtedy w Default_Handler przy pierwszym wystrzeleniu przerwania, co daje jedną z bardziej zdumiewających sesji debugowania, jakie ten fach ma do zaoferowania.