Capisco che una funzione statica in C permette quella particolare funzione da chiamare solo entro i confini di quel file. Quello che mi interessa è come ciò avvenga. Viene inserito in una parte specifica della memoria o il compilatore applica una specifica operazione a quella funzione. Questo stesso processo può essere applicato a una chiamata di funzione in assembly?In che modo C limita l'utilizzo di una funzione statica solo al suo file?
risposta
Non ha nella tabella il nome dell'oggetto, che gli impedisce di essere collegato in altre cose.
Funzioni e altri nomi vengono esportati come simboli nel file oggetto. Il linker utilizza questi simboli per risolvere tutti i tipi di riferimenti pendenti al momento del collegamento (ad esempio una chiamata a una funzione definita in un altro file). Quando lo si dichiara static
, semplicemente non verrà esportato come simbolo. Pertanto non verrà raccolto da nessun altro file. Potresti comunque chiamarlo da un altro file se avevi un puntatore a funzione.
E 'infatti l'opposto. Quando una funzione è non statica, il suo nome è scritto da qualche parte nel file oggetto, che il linker può quindi utilizzare per collegare altri file oggetto utilizzando questa funzione, l'indirizzo di quella funzione.
Quando la funzione è dichiarata static
, il compilatore semplicemente non mettere il nome.
La dichiarazione di una funzione static
non impedisce effettivamente che sia chiamato da altre unità di traduzione.
Nei static
fa è che impedisce la funzione di essere cui (collegate) da altre unità di traduzione per nome. Che eliminerà la possibilità di diretti chiamate a quella funzione, cioè chiama "per nome". Per ottenere ciò, il compilatore esclude semplicemente il nome della funzione dalla tabella dei nomi esterni esportati dall'unità di traduzione. Oltre a questo, non c'è assolutamente niente di speciale riguardo alle funzioni statiche.
È ancora possibile chiamare da altre unità di traduzione con altri mezzi. Ad esempio, se in qualche modo hai ottenuto un puntatore alla funzione static
in un'altra unità di traduzione, puoi chiamarlo tramite quel puntatore.
- 1. extern su una funzione statica in C++
- 2. Limita l'attributo personalizzato in modo che possa essere applicato solo a tipi specifici in C#?
- 3. In che modo una funzione restituisce in base al valore?
- 4. inoltrare la funzione statica C++
- 5. Perché una classe non può estendere una classe nidificata statica che si verifica al suo interno?
- 6. chiamata di funzione statica non statica in C++
- 7. Perché dichiarare una variabile o una funzione statica in C?
- 8. C/C++: funzione statica nel file di intestazione, cosa significa?
- 9. Funzione locale statica C++ vs funzione globale
- 10. Funzione statica Guida C++
- 11. C: come dichiarare una funzione statica che restituisce una stringa non statica?
- 12. Come testare una funzione statica
- 13. Funzione membro che restituisce una variabile statica
- 14. Scala equivalente della variabile statica C++ in una funzione
- 15. È possibile chiamare una funzione statica tramite un puntatore a funzione in C?
- 16. Metodo statico di una classe statica rispetto al metodo statico di una classe non statica (C#)
- 17. accesso a una mappa statica da una funzione membro statica - errore di segmentazione - C++
- 18. Struttura statica in C++
- 19. iPhone MapView che limita allo stato del Missouri solo
- 20. get nome della funzione al suo interno
- 21. int statica in funzione
- 22. Differenza tra una funzione inline e una funzione inline statica
- 23. Come dire se la funzione corrente è una funzione membro normale o statica in C++ 11?
- 24. ciò che accade a una funzione C statica che non si chiama
- 25. xlwt che limita il numero di righe
- 26. Limita solo una sessione per utente in ASP.NET
- 27. Ottenere namespace in una funzione statica
- 28. funzione che definisce all'interno di una funzione in C
- 29. La mia funzione restituisce una lista con un numero intero singolo al suo interno, come posso fare in modo che restituisca solo il numero intero?
- 30. Come creare una funzione PHP visibile solo all'interno di un file?