--資料由實驗室焦玉鵬師弟搜集整理-
1.首先介紹一下C/C++中的數值變量:
類型:short 、int、long、float、double、char
局部變量:
在某函數內部定義並使用,其作用範圍只是這個函數的大括號內部,跳出定義它的大括號就不會再起作用了(其內存會被釋放)即動態分配內存空間,而且不同的大括號中定義的變量名可以相同(它們之間互相不會受到影響),即使在函數內部存在大括號的嵌套,以上性質依然適用。
如果我們有這樣的需求,就是希望函數中局部變量的的值在調用後保存運行結果,下一次使用此變量時接著上一次運行的而結果繼續運行,那麼就要定義一個局部靜態變量了(static int x;),它只能在定義它的源程序文件中起作用,當出現跨文件調用時static int x;這樣的定義就不行了。這裡需要注意一點,一般的變量如果在定義時不賦初值它裡面的數值是隨機分配的,而局部靜態變量在定義時如果不賦初值編譯時自動賦零值,而函數內部的局部變量在定義時必須賦初值否則程序會報錯,全局變量就不會這樣。
其實在靜態存儲區分配的存儲單元在程序的整個運行期間都不會被釋放,在多次調用函數時其值都會被保留,但是它只適用於定義它的函數其他函數不能引用它,當整個程序運行完畢後其值才會被釋放。
全局變量:
在函數外部定義的變量稱為全局變量,下面來看它的作用範圍,該變量的作用範圍是從定義它的地方開始起作用直到整個源程序文件結束,也就是說全局變量即使沒有在大括號中定義(在大括號前定義,大括號後不行)也依然可以在大括號中起作用。
定義了全局變量後其在整個程序執行期間佔用內存空間,只有在整個程序執行完畢後這個全局變量才會被系統釋放掉。
但是如果我們有這樣的需求,在一個工程項目文件中存在多個源程序文件,某變量需要在一個原程序文件中運算完畢後接著還要趕著去參加另一個源程序文件的運算,這就出現了全局變量的跨文件引用問題,這個問題的解決方法只需要一個外部變量聲明就可以了(extern int x;),但在整個程序結束後它的值依然會被釋放掉。
介紹完C/C++全部的變量引用規則後發現不管某個變量的作用域有多麼廣泛它們全都會在該程序運行結束後被釋放掉,那麼如果我們有這樣的需求呢,就是在程序運行結束後再次運行該程序時,某個整形變量依然是上一次運行結束後的結果!!!
這就用到INI配置文件了,該文件的使用非常簡單並且非常實用,即保存程序運行過程中產生的變量(整形或字符串等),當程序再次運行時調用上一次保存在INI配置文件中的變量繼續運行。
2.接下來是INI配置文件的使用:
首先是獲取.INI配置文件中的預存信息其函數為:
DWORD GetPrivateProfileString(LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpDefaut, LPSTR lpReturnedString, DWORD nSize, LPCTSTR lpFileName);這個函數讀的是long string 類型,要想讀 INT類型需要用到 :
UINT GetPrivateProfileInt(LPCTSTRlpAppName,LPCTSTR lpKeyName, INT nDefault, LPCTSTR lpFileName);接下來介紹函數中各參數的含義:
LPCTSTR lpAppName -- INI文件中的一個欄位名LPCTSTR lpKeyName --- lpAppName 下的一個鍵名,也就是裡面具體的變量名LPCTSTR lpDefaut 如果沒有其前兩個參數值,則將此值賦給變量LPSTR lpReturnedString ---接收INI文件中的值的CString對象,即接收緩衝區DWORD nSize -接收緩衝區的大小LPCTSTR lpFileName ---完整的INI文件路徑名
讀到INI配置文件中的變量後接下來就要對其進行使用了,把使用完之後的變量值還需要對其進行寫入配置文件的操作,以便下一次調用,這就用到了
BOOL WritePrivateProfileString(LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpString, LPCTSTR lpFileName);其重複的變量值同上,其中LPCTSTR lpString ----是鍵值,也就是變量的值, 必須為LPCTSTR或CString類型
知道以上函數就可以實現INT類型變量的讀寫了,具體實例如下:
void Text (){CString str;int yong;
yong= ::GetPrivateProfileInt(_T("Mn"),_T("Li"),yong,"C:\\Users\\Administrator\\Desktop\\Pi.ini"); str.ReleaseBuffer();yong++;str.Format("%d", yong);WritePrivateProfileString(_T("Mn"),_T("Li"),str,"C:\\Users\\Administrator\\Desktop\\Pi.ini");}