我一直在C開發一段時間,來自面向對象的語言,如C++和Java,並使用標準庫函數,如fread()
和strtok()
,我開始懷疑:這些函數如何去存儲變量相關到他們的狀態?C庫如何存儲狀態變量?
例如,strtok()
對後續調用的行爲會有所不同,並且fread()
會跟蹤您在文件中的位置。這些信息必須存儲在某個地方,面向對象的語言中有一些作用域結構,例如private
或protected
來防止這些值被不必要的修改,但據我所知C沒有這些。
那麼,他們如何安全地存儲?或者它們實際上是全球性的,可以從任何地方修改?當我寫一個帶有需要存儲類似狀態信息的工具函數的頭文件時,就產生了這個問題。在C中做這種事情的「正確」方式是什麼,它在現有的庫中是如何處理的?
'fread'並不需要保存調用之間的狀態,因爲它需要存儲由'fread'所需的所有信息'FILE'結構。 –