głaszcząc moją białą brodę i mówienie w szałwii i pompatycznym głosem, mówię:
W dawnych czasach, kiedy FORTRAN i COBOL wykluczyć świat informatyczny, język C na początek musiał dopasować się do istniejących łańcuchów narzędzi. Te łańcuchy narzędzi zawierały edytory link (a/k/a linkers, a/k/a loader) i asemblery, które przetwarzały tylko krótkie 6-znakowe nazwy symboli (zmiennych i funkcji).
Kompilatory C dla tych łańcuchów narzędzi musiały udawać, że nazwy zmiennych i funkcji były krótkie, gdy wypisywały pliki obiektów, które mają być używane przez edytory linków. To była zła wiadomość. Dobrą wiadomością było to, że w programach C istnieje wiele symboli, które nie muszą pojawiać się w plikach obiektów.
Na przykład nazwy funkcji ... np. "main" i "sqrt" ... muszą pojawiać się w modułach obiektowych, więc kod z innych modułów obiektowych mógłby z nich korzystać. Podobnie nazwano globalne zmienne stylu "zewnętrznego". To są nazwy zewnętrzne.
Jednak wszystkie inne nazwy w programie C, na przykład nazwy zmiennych w zakresie funkcji, nazwy członków struktur i tak dalej, nie musiały być wprowadzane do modułów obiektów. Te są nazywane "nazwami wewnętrznymi".
Tak więc, na przykład, można mieć tych zmiennych C w funkcji
int myFavoriteItem;
int myFavoriteThing;
i że będzie dobrze. Ale można je zadeklarować jako zmienne zewnętrzne, tak jak poniżej:
extern int myFavoriteItem;
extern int myFavoriteThing;
Niektóre systemy napisze te nazwy się do plików obiektowych, jak gdyby były długie sześć liter (ponieważ pliki obiekt nie wiedział, co zrobić z dłuższe nazwy). Następnie spoglądają na plik obiektowy tak, jakby zostały zadeklarowane w ten sposób.
extern int myFavo;
extern int myFavo;
To byłyby duplikaty deklaracji. Kompilator języka C był wymagany do przechwytywania tego typu rzeczy i zgłaszania błędu, zamiast zapisywania duplikatu deklaracji do pliku obiektu. To była wielka pomoc dla programistów: zduplikowane deklaracje w plikach obiektowych generowały naprawdę niejasne komunikaty o błędzie edytora link.
Cytowany fragment określa, że kompilatory muszą rozpoznawać co najmniej 31 znaków nazwy wewnętrznej i 6 nazwy zewnętrznej. Nowoczesne kompilatory i biblioteki narzędzi nie mają już innych ograniczeń długości nazwy.
Która "książka C"? Czy faktycznie nazywa się "ANSI C"? – asteri
@Jeff Jest książka "The C Book" - http://www.amazon.com/The-Book-Featur-Standard-Instruction/dp/0201544334 Podejrzewam, że właśnie to odnosi się do PO. –
To jest standardowy limit C89/C90; standard C99 podnosi te limity (_63 znaczących znaków początkowych w identyfikatorze wewnętrznym lub nazwie makra ... 31 znaczących znaków początkowych w zewnętrznym identyfikatorze ..._) z pewnymi zastrzeżeniami dotyczącymi uniwersalnych nazw znaków w nazwach. Limity są takie same dla C2011. Zauważ, że standard C99 wymaga dużej czułości w przypadku, gdy oryginalny standard C89 nie. –