Rozumiem, że funkcja statyczna w C pozwala tej konkretnej funkcji na wywołanie tylko w granicach tego pliku. Interesuje mnie, jak to się dzieje. Jest umieszczany w określonej części pamięci lub jest kompilatorem stosującym określoną operację do tej funkcji. Czy ten sam proces można zastosować do wywołania funkcji w zespole?W jaki sposób C ogranicza użycie funkcji statycznej tylko do jej pliku?
Odpowiedz
Nie przechodzi do tabeli nazw obiektu, co uniemożliwia połączenie go z innymi obiektami.
Funkcje i inne nazwy są eksportowane jako symbole w pliku obiektowym. Łącznik używa tych symboli do rozwiązywania wszelkiego rodzaju wiszących odniesień w czasie połączenia (na przykład wywołanie funkcji zdefiniowanej w innym pliku). Po zadeklarowaniu go jako static
po prostu nie zostanie wyeksportowany jako symbol. Dlatego nie zostanie pobrane przez żaden inny plik. Możesz nadal wywoływać go z innego pliku, jeśli masz do niego wskaźnik funkcji.
Jest to wręcz przeciwnie. Gdy funkcja jest statyczna, jej nazwa jest zapisywana gdzieś w pliku obiektowym, który linker może następnie użyć do połączenia innych plików obiektów za pomocą tej funkcji z adresem tej funkcji.
Gdy funkcja jest zadeklarowana jako static
, kompilator po prostu nie umieszcza tam nazwy.
Zgłaszanie funkcji static
tak naprawdę nie uniemożliwia jej bycia o nazwie z innych jednostek tłumaczeniowych.
Co static
robi to zapobiega funkcję od bycia mowa (związane) od pozostałych jednostek tłumaczeniowych według nazwy. To wyeliminuje możliwość wywoływania tej funkcji, to jest wywołuje "po nazwie". Aby to osiągnąć, kompilator po prostu wyklucza nazwę funkcji z tabeli nazw zewnętrznych wyeksportowanych z jednostki tłumaczeniowej. Poza tym nie ma absolutnie nic specjalnego w statycznych funkcjach.
Nadal można zadzwonić pod numer, które działają z innych jednostek tłumaczeniowych w inny sposób. Na przykład, jeśli w jakiś sposób uzyskałeś wskaźnik do funkcji static
w innej jednostce tłumaczeniowej, możesz wywołać ją za pomocą tego wskaźnika.
- 1. użycie komend linera do analizy statycznej klang
- 2. nieprawidłowe użycie non-statycznej funkcji składowej
- 3. Jaki jest czas życia zmiennej statycznej w funkcji C++?
- 4. W GCC, w jaki sposób mogę eksportować tylko niektóre funkcje w bibliotece statycznej?
- 5. użycie FileSystemWatcher na jednym pliku w C#
- 6. niezdefiniowane odniesienie do funkcji statycznej
- 7. W jaki sposób powiązana jest nazwa i jej wartość referencyjna?
- 8. Czy istnieje sposób wdrażania/aktualizacji tylko statycznej zawartości do GAE?
- 9. Kolejność inicjalizacji statycznej C++
- 10. Ogranicza inlineformset_factory Django do tworzenia tylko nowych obiektów
- 11. W jaki sposób przekazać zmienne do pliku .Rmd R Markdown?
- 12. w jaki sposób extern "C" zezwala na kod C++ w pliku C?
- 13. Czy MongoDB w jakiś sposób ogranicza się do pojedynczego rdzenia?
- 14. Jak utworzyć łącze do biblioteki statycznej w języku C?
- 15. W jaki sposób można użyć funkcji CFFI do wywoływania istniejącej funkcji C podając kod źródłowy?
- 16. Yii ogranicza połączenie z bazą danych tylko do odczytu
- 17. Jaki jest właściwy sposób użycia wstrzykniętego fasoli w metodzie statycznej?
- 18. W jaki sposób przechwytuje mysz ComboBox po jej opuszczeniu?
- 19. YQL "przekierowany do pliku robots.txt ogranicza URL" Error Google Domain
- 20. Użycie file.managed do pobrania pliku w Salt
- 21. Użycie funkcji "z"
- 22. Pomoc w statycznej metodzie C++
- 23. W jaki sposób delegaci w języku C# są lepsze od wskaźników funkcji w C/C++?
- 24. Jaka jest składnia funkcji statycznej?
- 25. Jak utworzyć listę C# tylko przez deklarowanie jej atrybutu zestawu
- 26. Najlepszy prosty sposób na pozorowanie funkcji statycznej/globalnej?
- 27. Wywołanie funkcji za pośrednictwem jej adresu w pamięci w c/C++
- 28. Najlepszy sposób na refactor tej klasy statycznej w języku C#?
- 29. jaki sposób można podzielić ciąg tylko raz przy użyciu C#
- 30. Jak korzystać z funkcji z biblioteki statycznej, jeśli nie mam pliku nagłówkowego