我總是忘記將「靜態」前綴添加到我的變量和函數中,因此GCC將它們標記爲extern。是否可以更改此行爲,以便默認情況下將所有內容標記爲靜態。這兩種類型在運行時是否存在性能差異,還是更形式化?將默認值從Extern更改爲靜態
0
A
回答
5
1
首先:extern
修飾符是不是默認。該限定符表示提到的項目將在另一個編譯單元中定義,因此它僅適用於聲明全局變量之類的內容。
沒有辦法使static
修飾符成爲默認值,因爲沒有dynamic
修飾符可以取消這個默認值。因此,沒有辦法用適當的默認值編寫工作代碼:每個函數和變量都是static
,這會導致編譯器生成一個空的輸出文件!
這兩種類型在運行時是否存在性能差異,還是更形式化?
編譯器可以對static
函數和變量執行一些優化,而這些函數和變量不能在動態函數上執行。特別是,從未引用的函數和變量可能會完全丟棄,並且static
函數可以更積極地內聯。
相關問題
- 1. FTDI將PID更改爲默認值
- 2. 將tinyint默認值更改爲1 mysql
- 3. 靜態Qtime默認值
- 4. 默認值爲靜態布爾變量
- 5. 將靜態URL更改爲動態 - NodeJS
- 6. extern但靜態int?
- 7. 與EXTERN靜態表
- 8. jqgrid更改默認值
- 9. 更改列的默認值
- 10. JQDateRangeSlider更改默認值
- 11. 遞歸值默認更改
- 12. sqlite3更改列默認值
- 13. 更改EnableViewState的默認值
- 14. Java非靜態字段默認值?
- 15. Rails遷移 - 非靜態默認值
- 16. 將狀態欄更改爲「Light」後,將狀態欄更改回默認值每個視圖控制器方案
- 17. 將模型中的值更改爲默認值
- 18. 如何將軸的默認值更改爲用戶值
- 19. 如何將文件的默認值更改爲另一個值?
- 20. 是否可以將$ profile的默認值更改爲新值?
- 21. 將mysql默認引擎更改爲innodb
- 22. CAKEPHP - 將默認路徑更改爲webroot
- 23. 將默認終端shell更改爲root
- 24. 將UIWebView默認顏色更改爲UIImage
- 25. Crystal 2008 - 爲靜態值提供參數的默認值
- 26. Java - 靜態初始化與靜態變量的默認值
- 27. 如何將dropdownlist更新爲默認值
- 28. 將列更新爲默認值mysql
- 29. 更改默認行爲5.4
- 30. 更改System.Dynamic.ExpandoObject默認行爲
您可能需要從編譯後的代碼中轉儲符號,以查看是否有任何您已經忘記的靜態代碼。試試'nm','objdump'和其他類似的工具。 –