C++中的C++函數(shù)說明
C++函數(shù)中必須有main()函數(shù),main()函數(shù)是程序的入口點,前面介紹的每個樣本程序都有main()函數(shù),但是,并非所有C++程序都有傳統(tǒng)的main()函數(shù),用C或C++寫成的Windows程序入口點函數(shù)稱為WinMain(),而不是傳統(tǒng)的main()函數(shù)。
說明 C++ Builder GUI應(yīng)用程序有WinMain(),但隱藏起來了。C++函數(shù)使用戶無需考慮Windows程序的低級細(xì)節(jié),而可以集中考慮程序用戶界面和其它部分的創(chuàng)建。main()函數(shù)和其它函數(shù)一樣是函數(shù),有相同的構(gòu)成部分。
在32位控制臺應(yīng)用程序中,C++ Builder生成具有下列原型的缺省main()函數(shù):int main(int argc,char** argv);這個main()函數(shù)形式取兩個參數(shù)并返回一個整型值。前面說過,數(shù)值在調(diào)用函數(shù)時傳遞給函數(shù)。但對于main()函數(shù),沒有直接調(diào)用,而是在程序運行時自動執(zhí)行。那么,main()函數(shù)如何取得參數(shù)呢?辦法是從命令行取得。
這里要用命令行變元WM_KILLFOCUS、d和i啟動程序grep,我們要演示如何在main()函數(shù)中將其變?yōu)閍rgc和argv.首先,整型變量argc包含命令行中傳遞的參數(shù)個數(shù),至少為1,因為程序名也算作參數(shù)。變量argv是個數(shù)組,包含字串的指針。這個數(shù)組包含命令行中傳遞的每個字串。本例中:
- 1: #include <iostream.h>
- 2: #include <conio.h>
- 3: #pragma hdrstop
- 4:
- 5: int main(int argc,char **argv)
- 6: {
- 7:cout << "argv = "argc << end1;
- 8.for (int i=0;i<argc;i++)
- 9. cout << "Parameter " << i << ": " << argv[i]<< end1;
- 10. cout << end1 << "Press any key to continue...";
- 11: getch();
- 12: return 0;
- 13: }
將這個項目存為Argstest,然后不是單擊Run按鈕,而是選擇主菜單中的Project|Build All,這樣只建立項目而不執(zhí)行程序。項目建成后,選擇主菜單中的在Run|Parameters,RunParameters對話框RunParameters字段中輸入下列內(nèi)容:one two three "four five" six然后單擊Run按鈕,程序即用所指定的命令行參數(shù)運行。
另一種辦法是用下列命令行在DOS提示下運行程序:argstest one two three "four five" six程序運行時,它會顯示傳入的變元數(shù),然后列出每個變元。運行幾次,每次提供不同命令行變元,注意產(chǎn)生的結(jié)果。
C++函數(shù)一個強大的特性是能直接訪問內(nèi)存。由于這個特性,C++函數(shù)無法阻止你寫入特定內(nèi)存地址,即使這個地址是程序不讓訪問的。下列代碼是合法的,但會導(dǎo)致程序或Windows崩潰:int array[5];array[5]=10;這是常見的錯誤,因為數(shù)組是以0為基數(shù)的,最大腳標(biāo)應(yīng)是4而不是5。
如果重載數(shù)組末尾,則無法知道哪個內(nèi)存被改寫了,使結(jié)果難以預(yù)料,甚至?xí)?dǎo)致程序或Windows崩潰。這類問題很難診斷,因為受影響的內(nèi)存通常要在很久以后才訪問,這時才發(fā)生崩潰(讓你莫名其中之妙)。所以寫入數(shù)組時一定要小心。