Pracuję w C od tak dawna, że fakt, że kompilatory zazwyczaj dodają podkreślenie na początku extern
jest po prostu zrozumiałe ... Jednak, another SO question today zastanawiałem się nad prawdziwym powodem dodania podkreślenia. A twierdzi, że powodem jest:Dlaczego kompilatory języka C wstawiają podkreślenia do nazw zewnętrznych?
To było powszechną praktyką kompilatory C do poprzedzić wiodącego podkreślenia do wszystkich zewnętrznych identyfikatorów programu zakres w celu uniknięcia kolizji z wkładów wsparcia językowego Runtime
Myślę, że przynajmniej jądro prawdy do tego, ale także nie wydaje się tak naprawdę odpowiedzieć na to pytanie, ponieważ jeśli podkreślenie zostanie dodane do wszystkich elementów zewnętrznych, nie pomoże to w zapobieganiu konfliktom.
Czy ktoś ma dobre informacje na temat racji wiodącego podkreślenia?
Czy dodana część podkreślenia jest powodem, dla którego wywołanie systemowe systemu Unix creat()
nie kończy się na "e"? Słyszałem, że wczesne łączniki na niektórych platformach miały limit 6 znaków dla nazw. W takim przypadku dodanie podkreślenia do nazw zewnętrznych wydaje się być szalonym pomysłem (teraz mam tylko 5 postaci do grania ...).
Należy zauważyć, że takie zachowanie nie jest praktykowane na nowoczesnych systemach ELF. Było to powszechne w platformach aout/coff, najwyraźniej. –
Dlaczego Clang robi to na OS X? jak mogę to wyłączyć? – MarcusJ