Току-що преместих някакъв код от една платформа на друга, което изискваше промяна във версиите на компилатора. Два от източниците на помощни програми причиниха проблеми при свързването с недефинирани символи, за този пример ги наречете Foo.c и Foo.h.
Всичко се компилира и свързва добре с g++ 3.4.2 и си помислих, че преминаването към g++ 4.1.2 ще бъде безсмислено. При използване на 4.1.2 компилацията върви добре, но свързването е неуспешно поради недефинирани символи. Символите за всяка функция във Foo, които са били използвани в други изходни файлове, т.е. Bar.c, бяха недефинирани, въпреки че Foo.h беше включен в Bar.c.
Проблемът беше, че файлът Foo.c не включваше Foo.h. Така че въпросът е как g++ 3.4.2 свърза този код, когато 4.1.2 не можеше? Предполагам, че 3.4.2 очакваше .h файл и след това го включи "магически", за да избегне този проблем. Но има ли някой по-добро обяснение?