Witam!
Mam pytania odnośnie linkowania wewnętrznego i zewnętrznego.
Linkowanie wewnętrzne powoduje, że niektóre zmienne nie są znane w całym programie (nawet pomimo danych deklaracji), tylko ograniczają się do jednego pliku. I jakie obiekty poddawane są takiemu linkowaniu :?: Wyszukałem, że to m.in.:
1) Globalne obiekty statyczne,
2) Nazwy typów utworzone za pomocą typedef,
3) Funkcje składowe klas inline, oraz zwykłe funkcje inline,
4) Globalne obiekty z nienazwanej przestrzeni nazw,
5) Typy wyliczeniowe enum,
6) Globalne obiekty stałe (const) - o ile nie są zadeklarowane jako extern,
7) Nazwy klas nie użytych w deklaracjach obiektów.
I odnośnie tego są trzy sprawy:
A) O co chodzi z punktem 6) :?: Zdefiniowałem dwie stałe w różnych plikach - OK, nie ma konfliktu. Potem z jednego pliku wyrzuciłem definicję, a wstawiłem deklarację i próbowałem w funkcji main() wyświetlić zawartość tej stałej, to nastąpił błąd linkera. Więc po co ktoś napisał “o ile nie są zadeklarowane jako extern” :?: Wychodzi, że deklaracja unicestwia Internal Linkage - a tak nie jest…
B) Dlaczego stałość musi wymuszać linkowanie wewnętrzne - były ku temu jakieś powody :?:
C) O co chodzi z punktem 7) bo wcale go nie rozumiem…
Natomiast linkowanie zewnętrzne powoduje, że obiekty będą znane w całym programie, jeżeli umieścimy w odpowiednich miejscach określone deklaracje. Obiekty te to:
1) Definicje zmiennych
2) Definicje funkcji i funkcji składowych outline
3) Funkcje statyczne składowe
4) Deklaracje
I ostatnie pytanie:
D) Dodalibyście jeszcze coś do linkowania wewnętrznego lub zewnętrznego :?: