




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、附錄A C程序的基本開發(fā)過程C語言程序開發(fā)涉及到四個(gè)過程:編輯、編譯、連接、裝載并運(yùn)行。這些單詞所表達(dá)的意義我們可以慢慢體會,下面首要的是學(xué)會依葫蘆畫瓢,學(xué)會按照下面的方法在VC+環(huán)境下建立一個(gè)工程、編輯源文件、編譯、調(diào)試、裝載并運(yùn)行程序。在Windows操作系統(tǒng)下,VC+環(huán)境的基本使用方法如下,詳細(xì)的調(diào)試方法可參閱相關(guān)資料,或者參閱微軟MSDN幫助文件。A.1 安裝程序VC+環(huán)境的安裝請參閱相關(guān)的安裝程序說明。雙擊setup文件,然后根據(jù)提示,一路next就可以了。A.2 新建一個(gè)工程、新建一個(gè)源文件、添加源文件到工程1首先請?jiān)贔盤(或其他盤)上建立文件夾TEST,以便將待建的C程序工程文件
2、project等相關(guān)文件放置在該文件夾中。2新建一個(gè)工程project 首先鼠標(biāo)左鍵單擊“文件”菜單,選擇“新建”單擊鼠標(biāo)左鍵,系統(tǒng)將彈出一個(gè)窗口,單擊“工程”選項(xiàng),將得到圖A.1所示窗口。請?jiān)凇拔恢谩睓谔钊雱偛潘ǖ哪夸汧:TEST(可以是自己設(shè)定的其他目錄),并在“工程名稱”欄填入project(可以是自己命名的其他工程名),然后鼠標(biāo)左鍵單擊左邊窗口倒數(shù)第三項(xiàng)“Win32 Console Application”,使該項(xiàng)變藍(lán),然后鼠標(biāo)左鍵單擊“確定”按鈕。得到圖A.2所示窗口,選擇“一個(gè)空工程”,單擊“完成”得到圖A.3。再單擊“確定”得到圖A.4所示的窗口,鼠標(biāo)左鍵單擊右下角的“File
3、View”字樣,再單擊project files左邊的“+”號,在其下面的工作空間將出現(xiàn)三個(gè)文件夾:“Source Files”、“Header Files”、“Resource Files”,如圖A.5所示(此時(shí)尚無浮動菜單)。圖A.1圖A.2圖A.3圖A.4圖A.53新建一個(gè)源文件hello.c要新建一個(gè)C程序源文件可以選擇“文件”菜單的“新建”選項(xiàng),在彈出的窗口中選擇“文件”選項(xiàng)單擊,得到如圖A.6所示的窗口,其“位置”欄中的內(nèi)容是默認(rèn)的,在“添加到工程”前打勾,“工程名”project也是默認(rèn)的,但“文件名”一欄中的內(nèi)容需要自己填寫,且必須是以.c為后綴,比如圖中的 hello.c(注
4、:該欄的內(nèi)容一定要以.c為后綴,否則系統(tǒng)會默認(rèn)為.cpp,這樣編譯時(shí)就會調(diào)用C+的編譯器,而我們需要調(diào)用C語言的編譯器)。然后在左邊選項(xiàng)中選中“C+ Source File”選項(xiàng),單擊“確定”按鈕,就得到了hello.c文件。此時(shí),右邊文件區(qū)變白,我們就可以在文件區(qū)添加源程序代碼了,如圖A.8所示。此時(shí),左邊的工作空間的“Source Files”文件夾前將出現(xiàn)一個(gè)“+”號,單擊“+”號,其下將出現(xiàn)“hello.c”文件。在hello.c文件中編制源文件將得到如圖A.8所示的結(jié)果。 圖A.6圖A.7圖A.84添加一個(gè)源文件到工程鼠標(biāo)右鍵單擊“Source Files”文件夾,將彈出如圖A.5所
5、示的浮動菜單,拖動鼠標(biāo)到“添加文件到目錄”選項(xiàng),單擊鼠標(biāo)左鍵彈出“插入文件到工程”選窗口,選擇好正確的源文件,單擊“確定”按鈕,該源文件將添加到“Source Files”目錄(如添加成功,“Source Files”文件夾前面將出現(xiàn)一個(gè)“+”號,鼠標(biāo)左鍵單擊加號將看到剛才添加的源文件出現(xiàn)在“Source Files”文件夾下面,鼠標(biāo)左鍵雙擊該文件,該文件的內(nèi)容將顯示在右邊的文件區(qū),此時(shí)就可以編輯該源文件了。注:采用前述第3條方法生成的源文件hello.c不需要添加操作,因?yàn)樵谏伤鼤r(shí),它已經(jīng)自動添加到了project工程。A.3 編譯、連接、運(yùn)行、調(diào)試一個(gè)程序當(dāng)源文件編輯完成后,就可以編譯、
6、連接和運(yùn)行程序了。方法如下:單擊“組建”菜單的“編譯”選項(xiàng),將完成編譯工作得到*.obj目標(biāo)文件(文件名就是源文件的名字),編譯結(jié)果將在窗口最下面的輸出窗口顯示??筛鶕?jù)窗口的提示修改源文件以改正錯(cuò)誤。單擊“組建”菜單的“組建”選項(xiàng),完成連接工作得到project.exe可執(zhí)行文件(文件名是工程名),連接的結(jié)果也將在窗口最下面的輸出窗口顯示。單擊“組建”菜單的“全部重建”選項(xiàng),將完成編譯和連接兩項(xiàng)工作,編譯和連接的結(jié)果將在輸出窗口顯示。單擊“組建”菜單的“執(zhí)行”選項(xiàng),可運(yùn)行程序project.exe,程序運(yùn)行的結(jié)果如圖A.7所示。另外,單擊“組建”菜單的“開始調(diào)試”選項(xiàng),然后交替按下F11和F1
7、0快捷鍵可以完成程序的單步調(diào)試工作。調(diào)試方法大家可以逐步摸索,慢慢體會,多試試自然就熟悉了。不要怕出錯(cuò)誤,經(jīng)驗(yàn)是在錯(cuò)誤中不斷學(xué)習(xí)的。A.4 輸出窗口的常見錯(cuò)誤提示在教學(xué)中,同學(xué)們在遇到編譯、連接和運(yùn)行錯(cuò)誤提示時(shí)常常不知道其含義,下面羅列一下一些常見的錯(cuò)誤,以幫助大家上機(jī)操作。為了方便,我們采用了“倒推”的方式,我們將例題2.2的程序做一點(diǎn)簡單修改,看看將會出現(xiàn)的錯(cuò)誤和警告提示。注:我們將例題中的a=10和b=20兩語句改為用scanf("%d,%d", &a, &b)輸入。在練習(xí)時(shí),同學(xué)們也可以采用以下方法一步步試試,這樣就會知道自己的程序編譯、連接、調(diào)試、
8、運(yùn)行時(shí)出現(xiàn)類似問題的大致原因。1完全正確的程序?qū)⒗}2.2的源程序s2_2.c復(fù)制到project目錄。然后鼠標(biāo)雙擊project目錄下的project.dsw文件,將打開project工程(如新建工程也可)。此后鼠標(biāo)左鍵單擊“Source Files”文件夾下方的hello.c文件,使其變藍(lán),然后按下鍵盤上的“Delete”按鍵,hello.c文件將從“Source Files”文件夾上刪除。此后可按 A.2的第4操作步驟將s2_2.c源程序添加到“Source Files”目錄。雙擊“Source Files”文件夾下的s2_2.c文件名,將在右邊窗口顯示其文件內(nèi)容,此后可對文件進(jìn)行編輯將
9、“a=10;b=20;”兩語句刪除,并在該位置添加以下二語句:printf("Please input a, b:");/* 在屏幕上顯示提示語,提示下一步的操作 */scanf("%d,%d", &a, &b);/* 調(diào)用scanf()函數(shù)輸入a和b的值 */這樣程序?qū)⑷缦滤荆?* 文件名:s2_2.c,比較兩個(gè)整數(shù)的大小 */* 歡迎登陸C/C+教學(xué)網(wǎng)站: */#include <stdio.h>/* 文件包含預(yù)處理命令 */#include <stdlib.h>/* 文件包含預(yù)處理命令 */int Max
10、(int x, int y);/* 函數(shù)聲明語句。*/int main (void)/* 主函數(shù)main(void)。*/ int a, b, c;/* 變量定義語句,定義了三個(gè)變量:a,b,c */printf("Please input a, b:");/* 在屏幕上顯示提示語,提示下一步的操作 */scanf("%d,%d", &a, &b);/* 調(diào)用scanf()函數(shù)輸入a和b的值 */ c = Max (a, b);/* 函數(shù)調(diào)用語句,調(diào)用自定義函數(shù)Max( ),并將其返回值賦給c */ printf ("Max (
11、a, b) = %d.n", c);/* 調(diào)用在stdio.h中聲明的庫函數(shù)printf( )*/ /* 輸出系統(tǒng)提示并返回操作系統(tǒng) */ system("PAUSE"); /* 調(diào)用庫函數(shù)system( ) */ return 0; /* 返回值0,返回操作系統(tǒng) */ /* 下面是Max( )用戶自定義函數(shù)的函數(shù)定義部分,滿足函數(shù)定義的語法格式要求就是函數(shù) */int Max (int x, int y)/* 函數(shù)頭部分:x和y為形式參數(shù) */* 兩個(gè)外層大括弧之間的內(nèi)容為函數(shù)體部分 */ int z;/* 變量定義語句。定義了變量z */ if ( x>
12、y )/* 分支語句。如果x>y成立,將x的值賦給z,否則將y的值賦給z */ z = x;/* 將x的值賦值給z變量 */ else z = y;/* 將y的值賦值給z變量 */ return (z);/* 函數(shù)返回語句,函數(shù)返回主調(diào)函數(shù)并將z的值一并返回 */點(diǎn)擊“組建”菜單的“全部重建”按鈕,執(zhí)行編譯、連接后,輸出窗口將有如下顯示:-Configuration: project - Win32 Debug-Compiling.s2_2.cLject.exe - 0 error(s), 0 warning(s)表示編譯、連接正確出現(xiàn)0個(gè)錯(cuò)誤,0個(gè)警告。此時(shí)點(diǎn)擊“組
13、建”菜單的“執(zhí)行project.exe”按鈕,程序開始執(zhí)行,系統(tǒng)彈出一個(gè)Dos控制臺界面窗口,輸出提示語:“Please input a, b:”(如圖A.9所示),此時(shí),輸入:“10,20”(注:逗號為半角逗號),并按下回車,那么10將賦值給a,20將賦值給b,同時(shí)輸出窗口將顯示:“Max (a, b) = 20.”,表明運(yùn)行正常,并求到了a和b的最大值(如圖A.10所示)。圖A.9圖A.102輸入非半角逗號導(dǎo)致結(jié)果不正確在出現(xiàn)“Please input a, b:”的時(shí)候,輸入:“10,20”(全角逗號),此時(shí)系統(tǒng)輸出為:“Max (a, b) = 10.”。結(jié)果并不是希望的20,原因是2
14、0并未輸入給b,在scanf( )的輸入格式控制字符串中的兩個(gè)%d和%d之間有一個(gè)半角逗號,必須原樣輸入。上述輸入中系統(tǒng)并未接收到半角逗號所以20也就不可能輸入給b。另外,如果在輸入時(shí)輸入“10 20”(中間無半角逗號,只有空格),也會得到同樣的結(jié)果。當(dāng)我們將“scanf("%d,%d", &a, &b);”改為“scanf("%d%d", &a, &b);”時(shí),此時(shí)就可以在輸入時(shí)用空格來分隔兩個(gè)輸入的整數(shù)。3在main()函數(shù)前面將函數(shù)聲明語句“int Max (int x, int y);”注釋掉單擊“組建”菜單的“編
15、譯”按鈕,此時(shí)將會出現(xiàn)如下編譯結(jié)果提示:-Configuration: project - Win32 Debug-Compiling.s2_2.cF:testprojects2_2.c(16) : warning C4013: 'Max' undefined; assuming extern returning ints2_2.obj - 0 error(s), 0 warning(s)出現(xiàn)了C4013警告,它通知Max函數(shù)標(biāo)識符未定義,并假定其返回int型數(shù)據(jù)類型。在C89中,系統(tǒng)還可以假定它返回int,本題看起來也是正確的,但假設(shè)Max函數(shù)本身返回的不是int而是doub
16、le,系統(tǒng)的這種假定就錯(cuò)誤了。另外,C99中,所有的函數(shù)在使用前都應(yīng)聲明(main函數(shù)除外)。所以請養(yǎng)成習(xí)慣,使用前先對函數(shù)進(jìn)行聲明。4在main()函數(shù)前面將函數(shù)聲明語句“int Max (int x, int y);”改為“double Max (int x, int y);”單擊“組建”菜單的“編譯”按鈕,此時(shí)將會出現(xiàn)如下編譯結(jié)果提示:-Configuration: project - Win32 Debug-Compiling.s2_2.cF:testprojects2_2.c(16) : warning C4244: '=' : conversion from
17、9;double ' to 'int ', possible loss of dataF:testprojects2_2.c(26) : error C2371: 'Max' : redefinition; different basic types F:testprojects2_2.c(7) : see declaration of 'Max'執(zhí)行 cl.exe 時(shí)出錯(cuò).s2_2.obj - 1 error(s), 0 warning(s)系統(tǒng)報(bào)告了一個(gè)警告和一個(gè)錯(cuò)誤。鼠標(biāo)左鍵雙擊輸出窗口的C4244警告,將在程序窗口出現(xiàn)一個(gè)藍(lán)色箭頭
18、指向警告所在行,說明錯(cuò)誤就在該行或者該行附近。在“c = Max (a, b);”語句中,c是int型而Max( )的返回值被聲明為double型,所以系統(tǒng)警告說:從double賦值給int進(jìn)行的賦值轉(zhuǎn)換,將可能引起數(shù)據(jù)丟失。鼠標(biāo)左鍵雙擊C2371錯(cuò)誤提示,將在程序窗口出現(xiàn)一個(gè)藍(lán)色箭頭指向錯(cuò)誤所在行,說明錯(cuò)誤可能就在該行。該錯(cuò)誤提示說明:Max( )重復(fù)定義了。事實(shí)上我們在聲明時(shí)Max( )返回double,而在定義時(shí)返回int,所以系統(tǒng)認(rèn)為這是兩個(gè)不同的定義,而且名字又相同,當(dāng)然是重復(fù)定義了。將聲明語句的daouble改回int即可。C2371下面一句是提示我們查找錯(cuò)誤的線索請參閱Max()
19、的聲明語句,鼠標(biāo)左鍵雙擊它,程序窗口的藍(lán)色箭頭就會出現(xiàn)在該聲明語句前面。提示語“執(zhí)行 cl.exe 時(shí)出錯(cuò).”是告訴我們編譯出錯(cuò)了。在VC環(huán)境中,cl.exe和link.exe分別是對應(yīng)編譯功能和連接功能的執(zhí)行文件,當(dāng)程序中有語法錯(cuò)誤,在執(zhí)行編譯時(shí),系統(tǒng)就會提示“執(zhí)行cl.exe時(shí)出錯(cuò).”;當(dāng)執(zhí)行連接操作時(shí),出現(xiàn)諒解錯(cuò)誤時(shí),系統(tǒng)將報(bào)告“執(zhí)行l(wèi)ink.exe時(shí)出錯(cuò).”。4函數(shù)調(diào)用時(shí),在實(shí)參前面錯(cuò)誤增加數(shù)據(jù)類型說明,比如將“c = Max (a, b);”語句改為“c = Max (int a, int b);”系統(tǒng)輸出窗口顯示如下:-Configuration: project - Win32
20、Debug-Compiling.s2_2.cF:testprojects2_2.c(16) : error C2143: syntax error : missing ')' before 'type'F:testprojects2_2.c(16) : error C2198: 'Max' : too few actual parametersF:testprojects2_2.c(16) : error C2059: syntax error : ')'執(zhí)行 cl.exe 時(shí)出錯(cuò).s2_2.obj - 1 error(s), 0
21、 warning(s)鼠標(biāo)左鍵雙擊錯(cuò)誤c2134、c2198或c2059,藍(lán)色肩頭都將出現(xiàn)在“c = Max (int a, int b);”語句左邊,說明是該語句的錯(cuò)誤。在函數(shù)定義和函數(shù)聲明中所有形式參數(shù)前都應(yīng)該有類型說明,但是在函數(shù)調(diào)用時(shí),在實(shí)參前面則不能加類型說明了,因?yàn)榫幾g系統(tǒng)早已知道了實(shí)參的類型。5函數(shù)調(diào)用時(shí),實(shí)參與形式參數(shù)個(gè)數(shù)和類型不匹配,把“c = Max (a, b);”語句改為“c = Max ( a);” 系統(tǒng)輸出窗口顯示如下:-Configuration: project - Win32 Debug-Compiling.s2_2.cF:testprojects2_2.c(
22、16) : error C2198: 'Max' : too few actual parameters執(zhí)行 cl.exe 時(shí)出錯(cuò).s2_2.obj - 1 error(s), 0 warning(s)錯(cuò)誤C2198提示:Max( )實(shí)際參數(shù)過少。函數(shù)需要兩個(gè)參數(shù),實(shí)際只給了一個(gè)參數(shù),自然參數(shù)不匹配。6函數(shù)調(diào)用時(shí),實(shí)參與形式參數(shù)個(gè)數(shù)和類型不匹配“c = Max (a, b);”語句改為“c = Max ( a, a, a);”將出現(xiàn)以下錯(cuò)誤提示:F:testprojects2_2.c(16) : warning C4020: 'Max' : too many a
23、ctual parameters錯(cuò)誤C4020提示:Max( )實(shí)際參數(shù)過多。7在main()函數(shù)中將語句“scanf("%d,%d", &a, &b);”改為“scanf("%d,%d", a, b);”系統(tǒng)輸出窗口顯示如下:-Configuration: project - Win32 Debug-Compiling.s2_2.cF:testprojects2_2.c(14) : warning C4700: local variable 'b' used without having been initialized
24、F:testprojects2_2.c(14) : warning C4700: local variable 'a' used without having been initializeds2_2.obj - 0 error(s), 0 warning(s)警告C4700提示:變量a,b未經(jīng)初始化就使用。此時(shí)雖然未報(bào)告錯(cuò)誤,但是實(shí)際上程序是不能運(yùn)行的。運(yùn)行程序時(shí),在系統(tǒng)提示:“Please input a, b:”后,從鍵盤輸入的值10和20將不可能輸入給a和b。并且系統(tǒng)彈出如圖A.11所示的錯(cuò)誤提示框,表明內(nèi)存錯(cuò)誤。因?yàn)閟canf( )的輸入項(xiàng)應(yīng)該是地址項(xiàng),對于一般變量必
25、須通過&取變量的地址,只有本來就是指針變量或者數(shù)組名等才可以直接使用。這其實(shí)是內(nèi)存錯(cuò)誤的一種。尤其當(dāng)我們定義了一個(gè)指針變量,而又沒有讓該指針變量指向任何變量時(shí),卻通過該指針變量操作其指向的內(nèi)容時(shí),通常也會出現(xiàn)類似的內(nèi)存錯(cuò)誤。 圖A.11圖A.128在main()函數(shù)中注釋掉語句“scanf("%d,%d", &a, &b);”系統(tǒng)輸出窗口顯示將同第7點(diǎn),出現(xiàn)警告C4700提示:變量a,b未經(jīng)初始化就使用。但這種情況下,程序能夠運(yùn)行,只是運(yùn)行的結(jié)果莫名其妙,如下:Please input a, b:Max (a, b) = -858993460.結(jié)果并
26、不正確,因?yàn)閍和b沒有一個(gè)確定值,結(jié)果無意義。9在main()函數(shù)中將語句“scanf("%d,%d", &a, &b);”改為“scanf("%f,%f", &a, &b);”此時(shí)點(diǎn)擊“組建”菜單的“全部構(gòu)建”按鈕,系統(tǒng)不會出現(xiàn)任何警告或者錯(cuò)誤提示,表明編譯和連接都已經(jīng)正常通過。但是運(yùn)行時(shí)卻出現(xiàn)如圖A.12所示的錯(cuò)誤提示。它表明了一種運(yùn)行時(shí)錯(cuò)誤。這主要是由于輸入格式不對應(yīng),a和b本為int類型,我們卻以浮點(diǎn)型去輸入當(dāng)然是錯(cuò)誤的。而C語言是有比較嚴(yán)格類型檢查的。當(dāng)我們將“scanf("%d,%d", &
27、amp;a, &b);”改為“scanf("%l,%l", &a, &b);”時(shí),同樣得不到正確的結(jié)果,因?yàn)殚L整型的格式控制字符串是%ld而不是%l。改為“scanf("%ld,%ld", &a, &b);”則可以。10注釋掉“#include <stdio.h>”編譯、連接時(shí)系統(tǒng)將出現(xiàn)如下警告提示:-Configuration: project - Win32 Debug-Compiling.s2_2.cf:testprojects2_2.c(13) : warning C4013: 'pri
28、ntf' undefined; assuming extern returning intf:testprojects2_2.c(14) : warning C4013: 'scanf' undefined; assuming extern returning ints2_2.obj - 0 error(s), 0 warning(s)警告C4013:printf和scanf未定義。這兩個(gè)函數(shù)是系統(tǒng)庫函數(shù),由編譯器生產(chǎn)廠家提供,在<stdio.h>頭文件中聲明,因此要想使用它們必須在源文件中用包含預(yù)處理命令:“#include <stdio.h>
29、”將它們包含進(jìn)源文件。否則,系統(tǒng)在編譯時(shí)將發(fā)出上述警告。雖然執(zhí)行連接操作時(shí)能夠正確連接,系統(tǒng)運(yùn)行也能夠正確調(diào)用printf( )和scanf( )函數(shù),但是請大家記住該包含預(yù)處理命令是每一個(gè)程序都應(yīng)該包含的,文件中還定義了許多有用的東西。11在main()函數(shù)中將語句“int a,b,c;”注釋掉編譯時(shí)將得到以下結(jié)果:-Configuration: project - Win32 Debug-Compiling.s2_2.cF:testprojects2_2.c(14) : error C2065: 'a' : undeclared identifierF:testprojec
30、ts2_2.c(14) : error C2065: 'b' : undeclared identifierF:testprojects2_2.c(16) : error C2065: 'c' : undeclared identifier執(zhí)行 cl.exe 時(shí)出錯(cuò).s2_2.obj - 1 error(s), 0 warning(s)它表明a,b,c三個(gè)標(biāo)識符沒有定義。變量必須先定義、然后才能使用。12在main()函數(shù)中將語句“int a,b,c;”的分號去掉編譯時(shí)將出現(xiàn)以下錯(cuò)誤提示:F:testprojects2_2.c(13) : error C2146
31、: syntax error : missing '' before identifier 'printf'C2146錯(cuò)誤:在printf前丟失分號。13將Max()函數(shù)的“if ( x > y )”改為“if ( x > y );”編譯時(shí)將出現(xiàn)如下錯(cuò)誤提示:-Configuration: project - Win32 Debug-Compiling.s2_2.cF:testprojects2_2.c(33) : error C2181: illegal else without matching if執(zhí)行 cl.exe 時(shí)出錯(cuò).s2_2.obj
32、- 1 error(s), 0 warning(s)C2181錯(cuò)誤,非法else,沒有與其匹配的if。因?yàn)樵趇f(x>y)后面加上分號后,它就變成了一個(gè)完整的單分支if語句。分號就是一個(gè)空語句,它的語句體就是該空語句。這樣后面的else就沒有配套的if了。所以出錯(cuò)。14將Max()函數(shù)的“return (z);”語句注釋掉編譯時(shí)將出現(xiàn)如下錯(cuò)誤提示:-Configuration: project - Win32 Debug-Compiling.s2_2.cF:testprojects2_2.c(39) : warning C4716: 'Max' : must return
33、 a values2_2.obj - 0 error(s), 0 warning(s)警告C4716提示,Max()函數(shù)必須返回一個(gè)值。鼠標(biāo)左鍵雙擊該警告,程序中Max( )函數(shù)定義體的右大括符所在一行將出現(xiàn)藍(lán)色箭頭。表示到此為止還沒有return語句。15在main()函數(shù)中將語句“printf ("Max (a, b) = %d.n", c);”改為“printf ("Max (a, b) = %d.n");”此時(shí),編譯、連接都正確,但是輸出結(jié)果卻不正確,因?yàn)?d占位符根本就沒有對應(yīng)的輸出項(xiàng)。自然不會有任何輸出結(jié)果。16在main()函數(shù)中將語句“p
34、rintf ("Max (a, b) = %d.n", c);”改為“printf ("Max (a, b) = %f.n", c);”此時(shí),編譯、連接都正確,但是會出現(xiàn)第9條的運(yùn)行時(shí)錯(cuò)誤。原因就是類型不匹配。所以C語言程序需要特別注意輸入輸出格式和數(shù)據(jù)類型的嚴(yán)格匹配。17在Max ( )的定義體部分,在其函數(shù)頭部增加分號,變?yōu)椤癷nt Max (int x, int y);”此時(shí),編譯將報(bào)錯(cuò):-Configuration: project - Win32 Debug-Compiling.s2_2.cF:testprojects2_2.c(26) : e
35、rror C2449: found '' at file scope (missing function header?)F:testprojects2_2.c(39) : error C2059: syntax error : ''執(zhí)行 cl.exe 時(shí)出錯(cuò).project.exe - 1 error(s), 0 warning(s)錯(cuò)誤C2449表明在文件范圍內(nèi)丟失文件頭,事實(shí)上,它把“int Max (int x, int y);”當(dāng)成了一個(gè)獨(dú)立的函數(shù)聲明語句,這樣其后的函數(shù)體自然就沒有了函數(shù)頭,所以報(bào)錯(cuò)。18當(dāng)我們?nèi)サ鬽ain()函數(shù)前的函數(shù)聲明語句“i
36、nt Max (int x, int y);”后面的分號時(shí)此時(shí),編譯將不能夠通過,將報(bào)告如下錯(cuò)誤:-Configuration: project - Win32 Debug-Compiling.s2_2.cF:testprojects2_2.c(10) : error C2085: 'main' : not in formal parameter listF:testprojects2_2.c(10) : error C2143: syntax error : missing '' before ''F:testprojects2_2.c(26)
37、 : error C2084: function 'int _cdecl Max(int ,int )' already has a body執(zhí)行 cl.exe 時(shí)出錯(cuò).s2_2.obj - 1 error(s), 0 warning(s)這樣,系統(tǒng)將會把該Max()視為函數(shù)定義,所以它會認(rèn)為main()應(yīng)該是函數(shù)體的一個(gè)語句,丟失了分號,而且后面居然還有Max()函數(shù)體定義,自然被認(rèn)為重復(fù)定義。而事實(shí)上我們只是丟失了一個(gè)分號。19假設(shè)將語句“scanf("%d,%d", &a, &b);”用以下兩語句取代:“a = getchar( );
38、b = getchar( );”取代此時(shí),編譯、連接都會正常通過,但是請?zhí)貏e注意輸入的使用:假設(shè)想將65賦值給a,將66賦值給b,在出現(xiàn):“Please input a, b:”時(shí),正確的輸入應(yīng)該是連續(xù)輸入AB并回車;絕對不能輸入“A空格B回車”,這樣賦值給b的將是空格;也不能輸入“A回車B回車”,這樣賦值給b的將是回車。此后比較的結(jié)果自然不正確。20假設(shè)將“c = Max(a,b);”語句改為“c = Max1(a,b);”此時(shí)將出現(xiàn)如下編譯、連接警告和錯(cuò)誤提示:-Configuration: project - Win32 Debug-Compiling.s2_2.cF:testproje
39、cts2_2.c(16) : warning C4013: 'Max1' undefined; assuming extern returning intLinking.s2_2.obj : error LNK2001: unresolved external symbol _Max1Debug/project.exe : fatal error LNK1120: 1 unresolved externals執(zhí)行 link.exe 時(shí)出錯(cuò).project.exe - 1 error(s), 0 warning(s)C4013警告表明Max1標(biāo)識符未定義。LNK2001錯(cuò)誤表明不
40、能夠解析外部標(biāo)識符_Max1,因?yàn)镸ax1在本文件中找不到定義,所以系統(tǒng)會認(rèn)為它是一個(gè)在別的源文件中定義的外部標(biāo)識符,但是無法解析該外部標(biāo)識符,所以無法連接,出現(xiàn)致命的LNK1120錯(cuò)誤。link.exe是連接操作的執(zhí)行文件,由于無法解析標(biāo)識符,所以系統(tǒng)報(bào)告“執(zhí)行l(wèi)ink.exe時(shí)出錯(cuò).”。該錯(cuò)誤看起來很幼稚,但是我們在編程時(shí)卻經(jīng)常出現(xiàn)類似錯(cuò)誤,原因多半是由于函數(shù)名、變量名等標(biāo)識符前后不一致造成的。有同學(xué)經(jīng)常大小寫不分,l和1不分,0和o不分,造成書寫錯(cuò)誤。21把“int main (void)”頭部改為“int mian (void)”,看看編譯、連接時(shí)有什么反映編譯將正常通過,但連接卻會報(bào)
41、告如下錯(cuò)誤:-Configuration: project - Win32 Debug-Linking.LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _mainDebug/project.exe : fatal error LNK1120: 1 unresolved externals執(zhí)行 link.exe 時(shí)出錯(cuò).project.exe - 1 error(s), 0 warning(s)系統(tǒng)報(bào)告無法解析外部標(biāo)識符_main,因?yàn)槊總€(gè)C程序都必須有一個(gè)main()函數(shù),在本程序中錯(cuò)把main寫為了mian,系統(tǒng)
42、自然找不到main,所以只好到其他源文件中去找,依然找不到,所以報(bào)告無法解析外部標(biāo)識符main。曾有不止一個(gè)同學(xué)在執(zhí)行s2_1.c程序時(shí),信誓旦旦的告訴我:“陳老師,我的程序絕對和書上的一模一樣,沒有任何不同,可就是通不過,不知道是何原因?”。人們從來不相信自己會把main寫成mian。22將main( )函數(shù)中的語句“int a, b, c;”改為“int a, b, c, d;”系統(tǒng)編譯時(shí)將出現(xiàn)以下警告:F:testprojects2_2.c(11) : warning C4101: 'd' : unreferenced local variable它提示C4101警告:d局部變量(實(shí)際就是內(nèi)部變量)未引用。也就是說該變量定義后不曾使用。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2020-2021深圳寶安區(qū)展華實(shí)驗(yàn)學(xué)校小學(xué)三年級數(shù)學(xué)下期末第一次模擬試題(含答案)
- 2020-2021北京第一零五中學(xué)小學(xué)三年級數(shù)學(xué)下期末一模試題(及答案)
- 單軌空中列車施工方案
- 2025年新高考地理全真模擬試卷 5套(含答案解析)
- 2024年河南省中考滿分作文《不畏困難勇攀高峰》
- 專題01 地球和地圖-2025年中考地理一輪復(fù)習(xí)知識清單(背誦版)
- 個(gè)人購買柴油合同范例
- 財(cái)務(wù)業(yè)務(wù)合規(guī)程序計(jì)劃
- 手工制作社團(tuán)活動計(jì)劃
- 學(xué)習(xí)困難學(xué)生幫扶方案計(jì)劃
- 人教版(2024)七下 第二單元第1課《精彩瞬間》課件-七年級美術(shù)下冊(人教版)
- 2024天津高考英語試題及答案
- 2024中華人民共和國農(nóng)村集體經(jīng)濟(jì)組織法詳細(xì)解讀課件
- 高標(biāo)準(zhǔn)基本農(nóng)田土地整治項(xiàng)目工程施工費(fèi)預(yù)算表
- 河南省普通高校招生考生體格檢查表
- 新三板知識測評考題答案
- 試坑單環(huán)注水試驗(yàn)記錄表
- 管網(wǎng)工程停氣恢復(fù)供氣方案
- 英語教學(xué)經(jīng)驗(yàn)交流發(fā)言稿
- 水稻種植專業(yè)合作社簡介
- WINCC中文培訓(xùn)PPT課件
評論
0/150
提交評論