我知道C中的一個靜態函數允許該特定函數只能在該文件的範圍內調用。我感興趣的是如何發生這種情況。它被放入內存的特定部分還是編譯器對該函數應用特定的操作。這個相同的過程可以應用於程序集中的函數調用嗎?C如何將靜態函數的用途限制爲僅限於其文件?
8
A
回答
11
它不會將它放入對象的名稱表中,以防止它被鏈接到其他東西。
6
函數和其他名稱在目標文件中導出爲符號。鏈接器使用這些符號來解析鏈接時的各種懸掛引用(例如,調用另一個文件中定義的函數)。當你聲明它爲static
時,它不會被導出爲符號。因此它不會被任何其他文件拾取。如果你有一個指向它的函數指針,你仍然可以從另一個文件中調用它。
2
事實上恰恰相反。當一個函數是而不是靜態時,其名稱被寫入目標文件的某個地方,然後鏈接器可以使用該目標文件將使用此函數的其他目標文件鏈接到該函數的地址。
當函數聲明爲static
時,編譯器根本不會在那裏輸入名稱。
12
聲明函數static
並沒有真正防止它被從其他翻譯單元稱爲。
static
確實這是什麼阻止功能從通過名稱爲稱爲(聯)從其他的翻譯單元。這將消除直接調用該功能的可能性,即調用「按名稱」。爲了達到這個目的,編譯器只需從轉換單元導出的外部名稱表中排除函數名稱。除此之外,靜態函數絕對沒有什麼特別之處。
您仍然可以致電通過其他方式從其他翻譯單元起作用。例如,如果您以某種方式在其他翻譯單元中獲得了指向static
函數的指針,則可以通過該指針調用它。
相關問題
- 1. 如何將setAccessible限制爲僅「合法」用途?
- 2. 如何將angular-xeditable限制爲僅限正數?
- 3. 將文件上傳類型限制爲僅限圖像
- 4. CherryPy訪問限制與靜態文件
- 5. 限制用戶輸入僅限於2位小數的有效數字C/C++
- 6. 如何將QML滑塊的mouseArea限制爲僅限手柄?
- 7. 僅在文本框中將輸入限制爲數字? (c#)
- 8. 將用戶輸入限制爲僅限數字
- 9. 如何使用ASP.NET MVC將安全權限應用於靜態文件?
- 10. 如何將facebook圖搜索限制爲僅限城市
- 11. 如何將XLS2CSVmra限制爲僅限一張紙?
- 12. 將datagridview限制爲僅用於數字vb.net
- 13. 文件擴展限制爲.cor(僅)
- 14. S3限制文件僅限於某些類型
- 15. 如何改變靜態的JTable限制動態(靜態對象數組動態)
- 16. WordPress - 限制類別僅限於1級
- 17. 如何限制對Drupal 7中文件的訪問權限僅限於已通過身份驗證的用戶
- 18. 如何將靜態結構用於靜態函數? (像全球)
- 19. C++,linux:如何限制函數訪問文件系統?
- 20. 構造函數的可見性僅限於文件
- 21. 限制數字並將其限制爲兩個
- 22. concrete5僅限文件所有者的限制文件訪問
- 23. 將日誌數據限制爲僅限特定結果
- 24. React + Redux作爲靜態網站:限制?
- 25. MetaObject構造函數中限制參數的用途?
- 26. 限制靜態文本寬度
- 27. 在C#代碼合同中使用純函數時的靜態驗證限制?
- 28. 將VBA userform文本框中的輸入限制爲僅限數字
- 29. 僅限於C++頭庫
- 30. 將NFC標籤限制爲僅適用於應用程序(Android)