84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
我認為「大多數書裡不建議使用全域變數」應該是指大多數教學課程書籍,對於初學者來說,全域變數是很容易用錯的一個地方,所以教學課程不建議使用全局變數。但不能因此就完全禁止全域變數的使用,在正確使用的情況下,全域變數能夠有效的降低開發的複雜度。
而且 C 與 C++ 在全域變數上的處理也是不同的。 C++ 引入了「類別」這個封裝機制,從而減少了全域變數的使用,而 C 中缺乏類似的機制,所以在 C 中仍然會看到許多使用全域變數保存狀態的範例。
原始碼裡面怎麼寫的,編譯之後就怎麼放。
只不過靜態函式庫會和你程式放在一起,動態函式庫則是自己單獨的空間。
不太確定想問的是什麼問題。
不過既然提到了glfw函式庫,這是個開源的函式庫,可以直接去Github上看他的原始碼呀。
https://github.com/glfw/glfw
另外,多說一句,一般程式庫層級的程式碼,資料不一定會很多,很多都只是實作一些呼叫邏輯和功能組合。
補充:關於程式碼裡面的全域變數問題,原則上是避免無謂的或是為了偷懶使用的全域變量,但絕不是停用全域變數。因為有些變數的確確是全域都需要知道的,特別是一些配置參數類型的變數。而且不少全域變數都是const的,就是為了避免造成程式混亂。
既然題主提出了這個問題,那我建議你去看看Linux環境程式設計和編譯原理,編譯過程其實分好幾步,在學習C語言的時候應該都講過了,預處理、編譯、彙編、鏈接,大致上就是這四步,預處理就是很簡單的詞法分析,將預處理語句執行替換,編譯就是將其編譯為彙編代碼,當然,也有直接編譯成二進制代碼的,一般情況下都是拆成兩步驟編譯彙編,在彙編完畢後,就會產生o文件,也就是二進位物件文件,這個就是包含了所有開發程式碼的二進位文件,裡面有完整的正文段、資料段、未初始化數據段等各個固化二進位代碼。最終的連結階段就是將第三方函式庫的二進位程式碼和現有的二進位程式碼合併,包括正文段等其他區段合併。 但是,幾乎所有情況下,我們都使用了第三方的函式庫,無論是ISO C函式庫還是Unix提供的函式庫,在寫程式碼的時候,我們只include了它的頭文件,這只是為了透過編譯器的語法檢測。而實際的函式庫的二進位程式碼,都是已經打包成了靜態連結函式庫和動態連結函式庫,靜態連結函式庫和動態連結函式庫區別就在於,連結時候是否將實際的二進位程式碼合併,還是說只合併一段引導程式碼,這樣講題主是否明白了。
我認為「大多數書裡不建議使用全域變數」應該是指大多數教學課程書籍,對於初學者來說,全域變數是很容易用錯的一個地方,所以教學課程不建議使用全局變數。但不能因此就完全禁止全域變數的使用,在正確使用的情況下,全域變數能夠有效的降低開發的複雜度。
而且 C 與 C++ 在全域變數上的處理也是不同的。 C++ 引入了「類別」這個封裝機制,從而減少了全域變數的使用,而 C 中缺乏類似的機制,所以在 C 中仍然會看到許多使用全域變數保存狀態的範例。
原始碼裡面怎麼寫的,編譯之後就怎麼放。
只不過靜態函式庫會和你程式放在一起,動態函式庫則是自己單獨的空間。
不太確定想問的是什麼問題。
不過既然提到了glfw函式庫,這是個開源的函式庫,可以直接去Github上看他的原始碼呀。
https://github.com/glfw/glfw
另外,多說一句,一般程式庫層級的程式碼,資料不一定會很多,很多都只是實作一些呼叫邏輯和功能組合。
補充:
關於程式碼裡面的全域變數問題,原則上是避免無謂的或是為了偷懶使用的全域變量,但絕不是停用全域變數。因為有些變數的確確是全域都需要知道的,特別是一些配置參數類型的變數。而且不少全域變數都是const的,就是為了避免造成程式混亂。
既然題主提出了這個問題,那我建議你去看看Linux環境程式設計和編譯原理,編譯過程其實分好幾步,在學習C語言的時候應該都講過了,預處理、編譯、彙編、鏈接,大致上就是這四步,預處理就是很簡單的詞法分析,將預處理語句執行替換,編譯就是將其編譯為彙編代碼,當然,也有直接編譯成二進制代碼的,一般情況下都是拆成兩步驟編譯彙編,在彙編完畢後,就會產生o文件,也就是二進位物件文件,這個就是包含了所有開發程式碼的二進位文件,裡面有完整的正文段、資料段、未初始化數據段等各個固化二進位代碼。最終的連結階段就是將第三方函式庫的二進位程式碼和現有的二進位程式碼合併,包括正文段等其他區段合併。
但是,幾乎所有情況下,我們都使用了第三方的函式庫,無論是ISO C函式庫還是Unix提供的函式庫,在寫程式碼的時候,我們只include了它的頭文件,這只是為了透過編譯器的語法檢測。而實際的函式庫的二進位程式碼,都是已經打包成了靜態連結函式庫和動態連結函式庫,靜態連結函式庫和動態連結函式庫區別就在於,連結時候是否將實際的二進位程式碼合併,還是說只合併一段引導程式碼,這樣講題主是否明白了。