第一篇:C語(yǔ)言常見(jiàn)錯(cuò)誤集合大全-完整版-程序員必備手冊(cè)
C語(yǔ)言常見(jiàn)錯(cuò)誤集合大全-完整版-程序員必備手冊(cè).txt43風(fēng)帆,不掛在桅桿上,是一塊無(wú)用的布;桅桿,不掛上風(fēng)帆,是一根平常的柱;理想,不付諸行動(dòng)是虛無(wú)縹緲的霧;行動(dòng),而沒(méi)有理想,是徒走沒(méi)有盡頭的路。44成功的門(mén)往往虛掩著,只要你勇敢去推,它就會(huì)豁然洞開(kāi)。C語(yǔ)言的最大特點(diǎn)是:功能強(qiáng)、使用方便靈活。C編譯的程序?qū)φZ(yǔ)法檢查并不象其它高級(jí)語(yǔ)言那么嚴(yán)格,這就給編程人員留下“靈活的余地”,但還是由于這個(gè)靈活給程序的調(diào)試帶來(lái)了許多不便,尤其對(duì)初學(xué)C語(yǔ)言的人來(lái)說(shuō),經(jīng)常會(huì)出一些連自己都不知道錯(cuò)在哪里的錯(cuò)誤??粗绣e(cuò)的程序,不知該如何改起,本人通過(guò)對(duì)C的學(xué)習(xí),積累了一些C編程時(shí)常犯的錯(cuò)誤,寫(xiě)給各位學(xué)員以供參考。
1.書(shū)寫(xiě)標(biāo)識(shí)符時(shí),忽略了大小寫(xiě)字母的區(qū)別。main(){ int a=5;printf(“%d”,A);} 編譯程序把a(bǔ)和A認(rèn)為是兩個(gè)不同的變量名,而顯示出錯(cuò)信息。C認(rèn)為大寫(xiě)字母和小寫(xiě)字母是兩個(gè)不同的字符。習(xí)慣上,符號(hào)常量名用大寫(xiě),變量名用小寫(xiě)表示,以增加可讀性。2.忽略了變量的類(lèi)型,進(jìn)行了不合法的運(yùn)算。main(){ float a,b;printf(“%d”,a%b);} %是求余運(yùn)算,得到a/b的整余數(shù)。整型變量a和b可以進(jìn)行求余運(yùn)算,而實(shí)型變量則不允許進(jìn)行“求余”運(yùn)算。
3.將字符常量與字符串常量混淆。char c;c=“a”;在這里就混淆了字符常量與字符串常量,字符常量是由一對(duì)單引號(hào)括起來(lái)的單個(gè)字符,字符串常量是一對(duì)雙引號(hào)括起來(lái)的字符序列。C規(guī)定以“”作字符串結(jié)束標(biāo)志,它是由系統(tǒng)自動(dòng)加上的,所以字符串“a”實(shí)際上包含兩個(gè)字符:‘a(chǎn)'和‘',而把它賦給一個(gè)字符變量是不行的。
4.忽略了“=”與“==”的區(qū)別。
在許多高級(jí)語(yǔ)言中,用“=”符號(hào)作為關(guān)系運(yùn)算符“等于”。如在BASIC程序中可以寫(xiě) if(a=3)then ? 但C語(yǔ)言中,“=”是賦值運(yùn)算符,“==”是關(guān)系運(yùn)算符。如: if(a==3)a=b;前者是進(jìn)行比較,a是否和3相等,后者表示如果a和3相等,把b值賦給a。由于習(xí)慣問(wèn)題,初學(xué)者往往會(huì)犯這樣的錯(cuò)誤。5.忘記加分號(hào)。
分號(hào)是C語(yǔ)句中不可缺少的一部分,語(yǔ)句末尾必須有分號(hào)。a=1 b=2 編譯時(shí),編譯程序在“a=1”后面沒(méi)發(fā)現(xiàn)分號(hào),就把下一行“b=2”也作為上一行語(yǔ)句的一部分,這就會(huì)出現(xiàn)語(yǔ)法錯(cuò)誤。改錯(cuò)時(shí),有時(shí)在被指出有錯(cuò)的一行中未發(fā)現(xiàn)錯(cuò)誤,就需要看一下上一行是否漏掉了分號(hào)。{ z=x+y;t=z/100;printf(“%f”,t);} QQ291911320 對(duì)于復(fù)合語(yǔ)句來(lái)說(shuō),最后一個(gè)語(yǔ)句中最后的分號(hào)不能忽略不寫(xiě)(這是和PASCAL不同的)。6.多加分號(hào)。
對(duì)于一個(gè)復(fù)合語(yǔ)句,如: { z=x+y;t=z/100;printf(“%f”,t);};復(fù)合語(yǔ)句的花括號(hào)后不應(yīng)再加分號(hào),否則將會(huì)畫(huà)蛇添足。又如:
if(a%3==0);I++;本是如果3整除a,則I加1。但由于if(a%3==0)后多加了分號(hào),則if語(yǔ)句到此結(jié)束,程序?qū)?zhí)行I++語(yǔ)句,不論3是否整除a,I都將自動(dòng)加1。再如:
for(I=0;I<5;I++);{scanf(“%d”,&x);printf(“%d”,x);} 本意是先后輸入5個(gè)數(shù),每輸入一個(gè)數(shù)后再將它輸出。由于for()后多加了一個(gè)分號(hào),使循環(huán)體變?yōu)榭照Z(yǔ)句,此時(shí)只能輸入一個(gè)數(shù)并輸出它。7.輸入變量時(shí)忘記加地址運(yùn)算符“&”。int a,b;scanf(“%d%d”,a,b);這是不合法的。Scanf函數(shù)的作用是:按照a、b在內(nèi)存的地址將a、b的值存進(jìn)去?!?a”指a在內(nèi)存中的地址。
8.輸入數(shù)據(jù)的方式與要求不符。①scanf(“%d%d”,&a,&b);輸入時(shí),不能用逗號(hào)作兩個(gè)數(shù)據(jù)間的分隔符,如下面輸入不合法: 3,4
第二篇:C語(yǔ)言常見(jiàn)錯(cuò)誤集合-完整版-程序員必備手冊(cè)
C語(yǔ)言的最大特點(diǎn)是:功能強(qiáng)、使用方便靈活。C編譯的程序?qū)φZ(yǔ)法檢查并不象其它高級(jí)語(yǔ)言那么嚴(yán)格,這就給編程人員留下“靈活的余地”,但還是由于這個(gè)靈活給程序的調(diào)試帶來(lái)了許多不便,尤其對(duì)初學(xué)C語(yǔ)言的人來(lái)說(shuō),經(jīng)常會(huì)出一些連自己都不知道錯(cuò)在哪里的錯(cuò)誤??粗绣e(cuò)的程序,不知該如何改起,本人通過(guò)對(duì)C的學(xué)習(xí),積累了一些C編程時(shí)常犯的錯(cuò)誤,寫(xiě)給各位學(xué)員以供參考。
1.書(shū)寫(xiě)標(biāo)識(shí)符時(shí),忽略了大小寫(xiě)字母的區(qū)別。main(){ int a=5;printf(“%d”,A);} 編譯程序把a(bǔ)和A認(rèn)為是兩個(gè)不同的變量名,而顯示出錯(cuò)信息。C認(rèn)為大寫(xiě)字母和小寫(xiě)字母是兩個(gè)不同的字符。習(xí)慣上,符號(hào)常量名用大寫(xiě),變量名用小寫(xiě)表示,以增加可讀性。2.忽略了變量的類(lèi)型,進(jìn)行了不合法的運(yùn)算。main(){ float a,b;printf(“%d”,a%b);} %是求余運(yùn)算,得到a/b的整余數(shù)。整型變量a和b可以進(jìn)行求余運(yùn)算,而實(shí)型變量則不允許進(jìn)行“求余”運(yùn)算。
3.將字符常量與字符串常量混淆。char c;c=“a”;在這里就混淆了字符常量與字符串常量,字符常量是由一對(duì)單引號(hào)括起來(lái)的單個(gè)字符,字符串常量是一對(duì)雙引號(hào)括起來(lái)的字符序列。C規(guī)定以“”作字符串結(jié)束標(biāo)志,它是由系統(tǒng)自動(dòng)加上的,所以字符串“a”實(shí)際上包含兩個(gè)字符:‘a(chǎn)'和‘',而把它賦給一個(gè)字符變量是不行的。
4.忽略了“=”與“==”的區(qū)別。
在許多高級(jí)語(yǔ)言中,用“=”符號(hào)作為關(guān)系運(yùn)算符“等于”。如在BASIC程序中可以寫(xiě) if(a=3)then ? 但C語(yǔ)言中,“=”是賦值運(yùn)算符,“==”是關(guān)系運(yùn)算符。如: if(a==3)a=b;前者是進(jìn)行比較,a是否和3相等,后者表示如果a和3相等,把b值賦給a。由于習(xí)慣問(wèn)題,初學(xué)者往往會(huì)犯這樣的錯(cuò)誤。5.忘記加分號(hào)。
分號(hào)是C語(yǔ)句中不可缺少的一部分,語(yǔ)句末尾必須有分號(hào)。a=1 b=2 編譯時(shí),編譯程序在“a=1”后面沒(méi)發(fā)現(xiàn)分號(hào),就把下一行“b=2”也作為上一行語(yǔ)句的一部分,這就會(huì)出現(xiàn)語(yǔ)法錯(cuò)誤。改錯(cuò)時(shí),有時(shí)在被指出有錯(cuò)的一行中未發(fā)現(xiàn)錯(cuò)誤,就需要看一下上一行是否漏掉了分號(hào)。{ z=x+y;t=z/100;printf(“%f”,t);} QQ291911320 對(duì)于復(fù)合語(yǔ)句來(lái)說(shuō),最后一個(gè)語(yǔ)句中最后的分號(hào)不能忽略不寫(xiě)(這是和PASCAL不同的)。6.多加分號(hào)。
對(duì)于一個(gè)復(fù)合語(yǔ)句,如: { z=x+y;t=z/100;printf(“%f”,t);};復(fù)合語(yǔ)句的花括號(hào)后不應(yīng)再加分號(hào),否則將會(huì)畫(huà)蛇添足。又如:
if(a%3==0);I++;本是如果3整除a,則I加1。但由于if(a%3==0)后多加了分號(hào),則if語(yǔ)句到此結(jié)束,程序?qū)?zhí)行I++語(yǔ)句,不論3是否整除a,I都將自動(dòng)加1。再如:
for(I=0;I<5;I++);{scanf(“%d”,&x);printf(“%d”,x);} 本意是先后輸入5個(gè)數(shù),每輸入一個(gè)數(shù)后再將它輸出。由于for()后多加了一個(gè)分號(hào),使循環(huán)體變?yōu)榭照Z(yǔ)句,此時(shí)只能輸入一個(gè)數(shù)并輸出它。7.輸入變量時(shí)忘記加地址運(yùn)算符“&”。int a,b;scanf(“%d%d”,a,b);這是不合法的。Scanf函數(shù)的作用是:按照a、b在內(nèi)存的地址將a、b的值存進(jìn)去?!?a”指a在內(nèi)存中的地址。
8.輸入數(shù)據(jù)的方式與要求不符。①scanf(“%d%d”,&a,&b);輸入時(shí),不能用逗號(hào)作兩個(gè)數(shù)據(jù)間的分隔符,如下面輸入不合法: 3,4
第三篇:c語(yǔ)言常見(jiàn)錯(cuò)誤
1.= 不等于 ==
從 Algol 派生出來(lái)的語(yǔ)言,如 Pascal 和 Ada,用 := 表示賦值而用 = 表示比較。而 C 語(yǔ)言則是用 = 表示賦值而用 == 表示比較。這是因?yàn)橘x值的頻率要高于比較,因此為其分配更短的符號(hào)。此外,C 可以多重賦值(如 a = b = c),并且可以將賦值嵌入到一個(gè)大的表達(dá)式或者語(yǔ)句中。這種便捷導(dǎo)致了一個(gè)潛在的問(wèn)題:需要用比較的地方卻寫(xiě)成了賦值。下面的語(yǔ)句看起來(lái)好像是要檢查 x 是否等于 y :
if(x = y)
foo();
而實(shí)際上是將 y 的值賦值給 x,并檢查結(jié)果是否非零。再看看下面的一個(gè)希望跳過(guò)空格、制表符和換行符的循環(huán):
while(c == ’ ’ || c = ’t’ || c == ’n’)
c = getc(f);
在應(yīng)該與 ’t’ 進(jìn)行比較的地方程序員錯(cuò)誤地使用了 =,而不是==。這個(gè)“比較”實(shí)際上是將’t’ 賦給 c,然后判斷 c 的(新的)值是否為零。因?yàn)?’t’ 不為零,所以這個(gè)“比較”一直為真,因此這是一個(gè)死循環(huán)。
一些編譯器會(huì)對(duì)形如 e1 = e2 的條件給出一個(gè)警告以提醒用戶。當(dāng)你確實(shí)需要對(duì)一個(gè)變量進(jìn)行賦值,然后再檢查變量是否“非零”時(shí),為了避免這種警告信息,應(yīng)顯式給出比較符。也就是將:
if(x = y)
foo();改寫(xiě)為:
if((x = y)!= 0)
foo();
2.多字符符號(hào)
一些 C 符號(hào),如 /、* 或 =,只有一個(gè)字符。還有些 C 符號(hào),如 /*、== 或標(biāo)識(shí)符,具有多個(gè)字符。當(dāng)編譯器遇到緊連在一起的 / 和 * 時(shí),它必須決定是將這兩個(gè)字符識(shí)別為兩個(gè)符號(hào)還是一個(gè)單獨(dú)的符號(hào)。C 語(yǔ)言標(biāo)準(zhǔn)規(guī)定:“如果一個(gè)字符被識(shí)別為符號(hào),則應(yīng)該包含下一個(gè)字符看看包含此字符后構(gòu)成的字符串是否仍然可以構(gòu)成符號(hào),如果可以則繼續(xù)包含下一個(gè)字符,一直到不能構(gòu)成符號(hào)為止。”。因此,如果 / 是符號(hào)的第一個(gè)字符,并且 / 后面緊隨著一個(gè) *,則這兩個(gè)字符構(gòu)成注釋符開(kāi)始標(biāo)記。下面的語(yǔ)句看起來(lái)像是將 y 的值設(shè)置為 x 的值除以 p 所指向的值:
y = x/*p
/* p 指向除數(shù) */;
實(shí)際上,因?yàn)?/* 是注釋符開(kāi)始標(biāo)記,因此編譯器會(huì)簡(jiǎn)單地“吞噬”程序文本,直到 */ 出現(xiàn)為止。換句話說(shuō),這條語(yǔ)句僅僅把 y 的值設(shè)置為 x 的值,而根本沒(méi)有看到 p。我們應(yīng)該將這條語(yǔ)句改為:
y = x / *p
/* p 指向除數(shù) */;或者:
y = x /(*p)
/* p指向除數(shù) */;
3.else 問(wèn)題
考慮下面的程序片斷:
if(x == 0)
if(y == 0)
error();
else {
z = x
y;
f(&z);
}
寫(xiě)這段程序的程序員的目的明顯是想將情況分為兩種:x == 0 和x!= 0。在第一種情況中,如果 y == 0,則調(diào)用 error()。第二種情況中,程序執(zhí)行 z = x
y;和 f(&z)。
然而,這段程序的實(shí)際效果卻大為不同。其原因是 else 總是與離它最近的 if 相關(guān)聯(lián)。上面那段代碼其實(shí)等價(jià)于:
if(x == 0){
if(y == 0)
error();
else {
z = x
y;
f(&z);
}
}
也就是說(shuō),當(dāng) x!= 0 發(fā)生時(shí)什么也不做。如果要達(dá)到我們想要的效果,應(yīng)該改成:
if(x == 0){
if(y == 0)
error();
} else {
z = z
y;
f(&z);
}
4.表達(dá)式求值順序
一些運(yùn)算符以一種已知的、特定的順序?qū)ζ洳僮鲾?shù)進(jìn)行求值。但另一些則不是。例如下面的表達(dá)式:
a
5.&&、|| 和!運(yùn)算符
C 規(guī)定 0 代表“假”,非零代表“真”。這些運(yùn)算符返回 1 表示“真”而返回 0 表示“假”。&& 和 || 運(yùn)算符如果可以通過(guò)左邊的操作數(shù)確定整個(gè)表達(dá)式的真假性,就不會(huì)對(duì)右邊的操作數(shù)進(jìn)行求值。!10 返回 0,因?yàn)?10 非零;10 && 12 返回 1,因?yàn)?10 和 12 的值都不是 0;10 || 12 也是 1,因?yàn)?10 非零。這個(gè)表達(dá)式中的 12 不會(huì)被求值,因?yàn)樽筮叺?10 就足夠確定整個(gè)表達(dá)式為真。同理 :10 || f()中的 f()也不會(huì)被求值。
6.下標(biāo)從零開(kāi)始
C 語(yǔ)言中,一個(gè)具有 n 個(gè)元素的數(shù)組中沒(méi)有下標(biāo)為 n 的元素,元素的下標(biāo)是從 0 到n-1。下面的程序可能會(huì)崩潰:
int i, a[10];
for(i = 1;i
7.getchar 函數(shù)的返回值為整型(int)
請(qǐng)看以下程序:
#include
int main(void)
{
char c;
while((c = getchar())!= EOF)
putchar(c);
return 0;
}
這段代碼存在一個(gè)小小的,但已經(jīng)足以致命的錯(cuò)誤:c 被聲明為字符型(char)而不是整型。這意味著 c 可能不能正確接收 EOF,從而導(dǎo)致程序不能退出!正確的寫(xiě)法是:將 char 改成int。
第四篇:C語(yǔ)言常見(jiàn)錯(cuò)誤小結(jié)(定稿)
c語(yǔ)言的最大特點(diǎn)是:功能強(qiáng)、使用方便靈活。C編譯的程序?qū)φZ(yǔ)法檢查并不象其它高級(jí)語(yǔ)言那么嚴(yán)格,這就給編程人員留下“靈活的余地”,但還是由于這個(gè)靈活給程序的調(diào)試帶來(lái)了許多不便,尤其對(duì)初學(xué)C語(yǔ)言的人來(lái)說(shuō),經(jīng)常會(huì)出一些連自己都不知道錯(cuò)在哪里的錯(cuò)誤??粗绣e(cuò)的程序,不知該如何改起,本人通過(guò)對(duì)C的學(xué)習(xí),積累了一些C編程時(shí)常犯的錯(cuò)誤,寫(xiě)給各位學(xué)員以供參考。
1.書(shū)寫(xiě)標(biāo)識(shí)符時(shí),忽略了大小寫(xiě)字母的區(qū)別。
main(){
int a=5;
printf(“%d”,A);}
編譯程序把a(bǔ)和A認(rèn)為是兩個(gè)不同的變量名,而顯示出錯(cuò)信息。C認(rèn)為大寫(xiě)字母和小寫(xiě)字母是兩個(gè)不同的字符。習(xí)慣上,符號(hào)常量名用大寫(xiě),變量名用小寫(xiě)表示,以增加可讀性。
2.忽略了變量的類(lèi)型,進(jìn)行了不合法的運(yùn)算。
main(){
float a,b;
printf(“%d”,a%b);}
%是求余運(yùn)算,得到a/b的整余數(shù)。整型變量a和b可以進(jìn)行求余運(yùn)算,而實(shí)型變量則不答應(yīng)進(jìn)行“求余”運(yùn)算。
3.將字符常量與字符串常量混淆。
char c;c=“a”;
在這里就混淆了字符常量與字符串常量,字符常量是由一對(duì)單引號(hào)括起來(lái)的單個(gè)字符,字符串常量是一對(duì)雙引號(hào)括起來(lái)的字符序列。C規(guī)定以“”作字符串結(jié)束標(biāo)志,它是由系統(tǒng)自動(dòng)加上的,所以字符串“a”實(shí)際上包含兩個(gè)字符:‘a(chǎn)'和‘',而把它賦給一個(gè)字符變量是不行的。
4.忽略了“=”與“= =”的區(qū)別。
在許多高級(jí)語(yǔ)言中,用“=”符號(hào)作為關(guān)系運(yùn)算符“等于”。如在BASIC程序中可以寫(xiě)
if(a=3)then ?
但C語(yǔ)言中,“=”是賦值運(yùn)算符,“==”是關(guān)系運(yùn)算符。如:
if(a==3)a=b;
前者是進(jìn)行比較,a是否和3相等,后者表示假如a和3相等,把b值賦給a。由于習(xí)慣問(wèn)題,初學(xué)者往往會(huì)犯這樣的錯(cuò)誤。
5.忘記加分號(hào)。
分號(hào)是C語(yǔ)句中不可缺少的一部分,語(yǔ)句末尾必須有分號(hào)。
a=1 b=2
編譯時(shí),編譯程序在“a=1”后面沒(méi)發(fā)現(xiàn)分號(hào),就把下一行“b=2”也作為上一行語(yǔ)句的一部分,這就會(huì)出現(xiàn)語(yǔ)法錯(cuò)誤。改錯(cuò)時(shí),有時(shí)在被指出有錯(cuò)的一行中未發(fā)現(xiàn)錯(cuò)誤,就需要看一下上一行是否漏掉了分號(hào)。
{ z=x+y;t=z/100;printf(“%f”,t);}
對(duì)于復(fù)合語(yǔ)句來(lái)說(shuō),最后一個(gè)語(yǔ)句中最后的分號(hào)不能忽略不寫(xiě)(這是和PASCAL不同的)。
6.多加分號(hào)。
對(duì)于一個(gè)復(fù)合語(yǔ)句,如:
{ z=x+y;t=z/100;
printf(“%f”,t);};
復(fù)合語(yǔ)句的花括號(hào)后不應(yīng)再加分號(hào),否則將會(huì)畫(huà)蛇添足。
又如:
if(a%3==0);I++;
本是假如3整除a,則I加1。但由于if(a%3==0)后多加了分號(hào),則if語(yǔ)句到此結(jié)束,程序?qū)?zhí)行I++語(yǔ)句,不論3是否整除a,I都將自動(dòng)加1。
再如:
for(I=0;I<5;I++);{scanf(“%d”,&x);printf(“%d”,x);}
本意是先后輸入5個(gè)數(shù),每輸入一個(gè)數(shù)后再將它輸出。由于for()后多加了一個(gè)分號(hào),使循環(huán)體變?yōu)榭照Z(yǔ)句,此時(shí)只能輸入一個(gè)數(shù)并輸出它。
7.輸入變量時(shí)忘記加地址運(yùn)算符“&”。
int a,b;
scanf(“%d%d”,a,b);
這是不合法的。Scanf函數(shù)的作用是:按照a、b在內(nèi)存的地址將a、b的值存進(jìn)去?!?a”指a在內(nèi)存中的地址。
8.輸入數(shù)據(jù)的方式與要求不符。
①scanf(“%d%d”,&a,&b);
輸入時(shí),不能用逗號(hào)作兩個(gè)數(shù)據(jù)間的分隔符,如下面輸入不合法:
3,4
輸入數(shù)據(jù)時(shí),在兩個(gè)數(shù)據(jù)之間以一個(gè)或多個(gè)空格間隔,也可用回車(chē)鍵,跳格鍵tab。
②scanf(“%d,%d”,&a,&b);
C規(guī)定:假如在“格式控制”字符串中除了格式說(shuō)明以外還有其它字符,則在輸入數(shù)據(jù)時(shí)應(yīng)輸入與這些字符相同的字符。下面輸入是合法的:
3,4
此時(shí)不用逗號(hào)而用空格或其它字符是不對(duì)的。4 3:4
又如:
scanf(“a=%d,b=%d”,&a,&b);輸入應(yīng)如以下形式:
a=3,b=4
9.輸入字符的格式與要求不一致。
在用“%c”格式輸入字符時(shí),“空格字符”和“轉(zhuǎn)義字符”都作為有效字符輸入。
scanf(“%c%c%c”,&c1,&c2,&c3);如輸入a b c
字符“a”送給c1,字符“ ”送給c2,字符“b”送給c3,因?yàn)?c只要求讀入一個(gè)字符,后面不需要用空格作為兩個(gè)字符的間隔。
10.輸入輸出的數(shù)據(jù)類(lèi)型與所用格式說(shuō)明符不一致。
例如,a已定義為整型,b定義為實(shí)型
a=3;b=4.5;
printf(“%f%dn”,a,b);
編譯時(shí)不給出出錯(cuò)信息,但運(yùn)行結(jié)果將與原意不符。這種錯(cuò)誤尤其需要注重。
11.輸入數(shù)據(jù)時(shí),企圖規(guī)定精度。
scanf(“%7.2f”,&a);
這樣做是不合法的,輸入數(shù)據(jù)時(shí)不能規(guī)定精度。
12.switch語(yǔ)句中漏寫(xiě)break語(yǔ)句。
例如:根據(jù)考試成績(jī)的等級(jí)打印出百分制數(shù)段。
switch(grade)
{ case 'A':printf(“85~100n”);case 'B':printf(“70~84n”);case 'C':printf(“60~69n”);case 'D':printf(“<60n”);default:printf(“errorn”);
由于漏寫(xiě)了break語(yǔ)句,case只起標(biāo)號(hào)的作用,而不起判定作用。因此,當(dāng)grade值為A時(shí),printf函數(shù)在執(zhí)行完第一個(gè)語(yǔ)句后接著執(zhí)行第二、三、四、五個(gè)printf函數(shù)語(yǔ)句。正確寫(xiě)法應(yīng)在每個(gè)分支后再加上“break;”。例如
case 'A':printf(“85~100n”);break;
13.忽視了while和do-while語(yǔ)句在細(xì)節(jié)上的區(qū)別。
(1)main(){int a=0,I;
scanf(“%d”,&I);while(I<=10){a=a+I;I++;}
printf(“%d”,a);}
(2)main(){int a=0,I;
scanf(“%d”,&I);do
{a=a+I;I++;
}while(I<=10);printf(“%d”,a);}
可以看到,當(dāng)輸入I的值小于或等于10時(shí),二者得到的結(jié)果相同。而當(dāng)I>10時(shí),二者結(jié)果就不同了。因?yàn)閣hile循環(huán)是先判定后執(zhí)行,而do-while循環(huán)是先執(zhí)行后判定。對(duì)于大于10的數(shù)while循環(huán)一次也不執(zhí)行循環(huán)體,而do-while語(yǔ)句則要執(zhí)行一次循環(huán)體。
14.定義數(shù)組時(shí)誤用變量。
int n;
scanf(“%d”,&n);int a[n];
數(shù)組名后用方括號(hào)括起來(lái)的是常量表達(dá)式,可以包括常量和符號(hào)常量。即C不答應(yīng)對(duì)數(shù)組的大小作動(dòng)態(tài)定義。
15.在定義數(shù)組時(shí),將定義的“元素個(gè)數(shù)”誤認(rèn)為是可使的最大下標(biāo)值。
m ain()
{static int a[10]={1,2,3,4,5,6,7,8,9,10};printf(“%d”,a[10]);}
C語(yǔ)言規(guī)定:定義時(shí)用a[10],表示a數(shù)組有10個(gè)元素。其下標(biāo)值由0開(kāi)始,所以數(shù)組元素a[10]是不存在的。
16.初始化數(shù)組時(shí),未使用靜態(tài)存儲(chǔ)。
int a[3]={0,1,2};
這樣初始化數(shù)組是不對(duì)的。C語(yǔ)言規(guī)定只有靜態(tài)存儲(chǔ)(static)數(shù)組和外部存儲(chǔ)(exterm)數(shù)組才能初始化。應(yīng)改為:
static int a[3]={0,1,2};
17.在不應(yīng)加地址運(yùn)算符&的位置加了地址運(yùn)算符。
scanf(“%s”,&str);
C語(yǔ)言編譯系統(tǒng)對(duì)數(shù)組名的處理是:數(shù)組名代表該數(shù)組的起始地址,且scanf函數(shù)中的輸入項(xiàng)是字符數(shù)組名,不必要再加地址符&。應(yīng)改為:
scanf(“%s”,str);
18.同時(shí)定義了形參和函數(shù)中的局部變量。
int max(x,y)int x,y,z;{z=x>y?x:y;return(z);}
形參應(yīng)該在函數(shù)體外定義,而局部變量應(yīng)該在函數(shù)體內(nèi)定義。應(yīng)改為:
int max(x,y)int x,y;{int z;
z=x>y?x:y;return(z);}
附錄:出錯(cuò)信息解釋
Ambiguous operators need parentheses 不明確的運(yùn)算需要用括號(hào)括起
Ambiguous symbol 'xxx' 不明確的符號(hào)
Argument list syntax error 參數(shù)表語(yǔ)法錯(cuò)誤
Array bounds missing 丟失數(shù)組界限符
Array size toolarge 數(shù)組尺寸太大
Bad character in paramenters 參數(shù)中有不適當(dāng)?shù)淖址?/p>
Bad file name format in include directive 包含命令中文件名格式不正確
Bad ifdef directive synatax 編譯預(yù)處理ifdef有語(yǔ)法錯(cuò)
Bad undef directive syntax 編譯預(yù)處理undef有語(yǔ)法錯(cuò)
Bit field too large 位字段太長(zhǎng)
Call of non-function 調(diào)用未定義的函數(shù)
Call to function with no prototype 調(diào)用函數(shù)時(shí)沒(méi)有函數(shù)的說(shuō)明
Cannot modify a const object 不允許修改常量對(duì)象
Case outside of switch 漏掉了case 語(yǔ)句
Case syntax error Case 語(yǔ)法錯(cuò)誤
Code has no effect
代碼不可述不可能執(zhí)行到
Compound statement missing{ 分程序漏掉“{”
Conflicting type modifiers 不明確的類(lèi)型說(shuō)明符
Constant expression required 要求常量表達(dá)式
Constant out of range in comparison 在比較中常量超出范圍
Conversion may lose significant digits 轉(zhuǎn)換時(shí)會(huì)丟失意義的數(shù)字
Conversion of near pointer not allowed 不允許轉(zhuǎn)換近指針
Could not find file 'xxx' 找不到XXX文件
Declaration missing;說(shuō)明缺少“;”
Declaration syntax error 說(shuō)明中出現(xiàn)語(yǔ)法錯(cuò)誤
Default outside of switch
Default 出現(xiàn)在switch語(yǔ)句之外
Define directive needs an identifier 定義編譯預(yù)處理需要標(biāo)識(shí)符
Division by zero 用零作除數(shù)
Do statement must have while Do-while語(yǔ)句中缺少while部分
Enum syntax error 枚舉類(lèi)型語(yǔ)法錯(cuò)誤
Enumeration constant syntax error 枚舉常數(shù)語(yǔ)法錯(cuò)誤
Error directive :xxx
錯(cuò)誤的編譯預(yù)處理命令
Error writing output file 寫(xiě)輸出文件錯(cuò)誤
Expression syntax error 表達(dá)式語(yǔ)法錯(cuò)誤
Extra parameter in call 調(diào)用時(shí)出現(xiàn)多余錯(cuò)誤
File name too long 文件名太長(zhǎng)
Function call missing)函數(shù)調(diào)用缺少右括號(hào)
Fuction definition out of place 函數(shù)定義位置錯(cuò)誤
Fuction should return a value 函數(shù)必需返回一個(gè)值
Goto statement missing label Goto語(yǔ)句沒(méi)有標(biāo)號(hào)
Hexadecimal or octal constant too large 16進(jìn)制或8進(jìn)制常數(shù)太大
Illegal character 'x' 非法字符x
Illegal initialization 非法的初始化
Illegal octal digit 非法的8進(jìn)制數(shù)字
Illegal pointer subtraction 非法的指針相減
Illegal structure operation 非法的結(jié)構(gòu)體操作
Illegal use of floating point 非法的浮點(diǎn)運(yùn)算
Illegal use of pointer 指針使用非法
Improper use of a typedefsymbol 類(lèi)型定義符號(hào)使用不恰當(dāng)
In-line assembly not allowed 不允許使用行間匯編
Incompatible storage class 存儲(chǔ)類(lèi)別不相容
Incompatible type conversion 不相容的類(lèi)型轉(zhuǎn)換
Incorrect number format 錯(cuò)誤的數(shù)據(jù)格式
Incorrect use of default Default使用不當(dāng)
Invalid indirection 無(wú)效的間接運(yùn)算
Invalid pointer addition 指針相加無(wú)效
Irreducible expression tree 無(wú)法執(zhí)行的表達(dá)式運(yùn)算
Lvalue required
需要邏輯值0或非0值
Macro argument syntax error 宏參數(shù)語(yǔ)法錯(cuò)誤
Macro expansion too long 宏的擴(kuò)展以后太長(zhǎng)
Mismatched number of parameters in definition 定義中參數(shù)個(gè)數(shù)不匹配
Misplaced break
此處不應(yīng)出現(xiàn)break語(yǔ)句
Misplaced continue
此處不應(yīng)出現(xiàn)continue語(yǔ)句
Misplaced decimal point 此處不應(yīng)出現(xiàn)小數(shù)點(diǎn)
Misplaced elif directive 不應(yīng)編譯預(yù)處理elif Misplaced else 此處不應(yīng)出現(xiàn)else Misplaced else directive
此處不應(yīng)出現(xiàn)編譯預(yù)處理else Misplaced endif directive
此處不應(yīng)出現(xiàn)編譯預(yù)處理endif Must be addressable 必須是可以編址的
Must take address of memory location 必須存儲(chǔ)定位的地址
No declaration for function 'xxx' 沒(méi)有函數(shù)xxx的說(shuō)明
No stack 缺少堆棧
No type information 沒(méi)有類(lèi)型信息
Non-portable pointer assignment 不可移動(dòng)的指針(地址常數(shù))賦值
Non-portable pointer comparison 不可移動(dòng)的指針(地址常數(shù))比較
Non-portable pointer conversion 不可移動(dòng)的指針(地址常數(shù))轉(zhuǎn)換
Not a valid expression format type 不合法的表達(dá)式格式
Not an allowed type 不允許使用的類(lèi)型
Numeric constant too large 數(shù)值常太大
Out of memory 內(nèi)存不夠用
Parameter 'xxx' is never used 能數(shù)xxx沒(méi)有用到
Pointer required on left side of-> 符號(hào)->的左邊必須是指針
Possible use of 'xxx' before definition 在定義之前就使用了xxx(警告)
Possibly incorrect assignment 賦值可能不正確
Redeclaration of 'xxx' 重復(fù)定義了xxx
Redefinition of 'xxx' is not identical xxx的兩次定義不一致
Register allocation failure 寄存器定址失敗
Repeat count needs an lvalue 重復(fù)計(jì)數(shù)需要邏輯值
Size of structure or array not known 結(jié)構(gòu)體或數(shù)給大小不確定
Statement missing;語(yǔ)句后缺少“;”
Structure or union syntax error 結(jié)構(gòu)體或聯(lián)合體語(yǔ)法錯(cuò)誤
Structure size too large 結(jié)構(gòu)體尺寸太大
Sub scripting missing ] 下標(biāo)缺少右方括號(hào)
Superfluous & with function or array 函數(shù)或數(shù)組中有多余的“&” Suspicious pointer conversion 可疑的指針轉(zhuǎn)換
Symbol limit exceeded 符號(hào)超限
Too few parameters in call
函數(shù)調(diào)用時(shí)的實(shí)參少于函數(shù)的參數(shù)不
Too many default cases
Default太多(switch語(yǔ)句中一個(gè))Too many error or warning messages 錯(cuò)誤或警告信息太多
Too many type in declaration 說(shuō)明中類(lèi)型太多
Too much auto memory in function 函數(shù)用到的局部存儲(chǔ)太多
Too much global data defined in file 文件中全局?jǐn)?shù)據(jù)太多
Two consecutive dots 兩個(gè)連續(xù)的句點(diǎn)
Type mismatch in parameter xxx 參數(shù)xxx類(lèi)型不匹配
Type mismatch in redeclaration of 'xxx' xxx重定義的類(lèi)型不匹配
Unable to create output file 'xxx' 無(wú)法建立輸出文件xxx
Unable to open include file 'xxx' 無(wú)法打開(kāi)被包含的文件xxx Unable to open input file 'xxx' 無(wú)法打開(kāi)輸入文件xxx Undefined label 'xxx' 沒(méi)有定義的標(biāo)號(hào)xxx Undefined structure 'xxx' 沒(méi)有定義的結(jié)構(gòu)xxx Undefined symbol 'xxx' 沒(méi)有定義的符號(hào)xxx
Unexpected end of file in comment started on line xxx 從xxx行開(kāi)始的注解尚未結(jié)束文件不能結(jié)束
Unexpected end of file in conditional started on line xxx 從xxx 開(kāi)始的條件語(yǔ)句尚未結(jié)束文件不能結(jié)束
Unknown assemble instruction 未知的匯編結(jié)構(gòu)
Unknown option 未知的操作
Unknown preprocessor directive: 'xxx' 不認(rèn)識(shí)的預(yù)處理命令xxx Unreachable code 無(wú)路可達(dá)的代碼
Unterminated string or character constant 字符串缺少引號(hào)
User break
用戶強(qiáng)行中斷了程序
Void functions may not return a value Void類(lèi)型的函數(shù)不應(yīng)有返回值
Wrong number of arguments 調(diào)用函數(shù)的參數(shù)數(shù)目錯(cuò)
'xxx' not an argument xxx不是參數(shù)
'xxx' not part of structure xxx不是結(jié)構(gòu)體的一部分
xxx statement missing(xxx語(yǔ)句缺少左括號(hào)
xxx statement missing)xxx語(yǔ)句缺少右括號(hào)
xxx statement missing;xxx缺少分號(hào)
xxx' declared but never used 說(shuō)明了xxx但沒(méi)有使用
xxx' is assigned a value which is never used 給xxx賦了值但未用過(guò)
Zero length structure 結(jié)構(gòu)體的長(zhǎng)度為零
第五篇:黑馬程序員C語(yǔ)言教程:C++語(yǔ)言78個(gè)常見(jiàn)編譯錯(cuò)誤及分析
C語(yǔ)言常見(jiàn)編譯錯(cuò)誤及分析大全 fatal error C1003: error count exceeds number;stopping compilation
中文對(duì)照:(編譯錯(cuò)誤)錯(cuò)誤太多,停止編譯 分析:修改之前的錯(cuò)誤,再次編譯 fatal error C1004: unexpected end of file found
中文對(duì)照:(編譯錯(cuò)誤)文件未結(jié)束
分析:一個(gè)函數(shù)或者一個(gè)結(jié)構(gòu)定義缺少“}”、或者在一個(gè)函數(shù)調(diào)用或表達(dá)式中括號(hào)沒(méi)有配對(duì)出現(xiàn)、或者注釋符“/*?*/”不完整等 fatal error C1083: Cannot open include file: 'xxx': No such file or directory
中文對(duì)照:(編譯錯(cuò)誤)無(wú)法打開(kāi)頭文件xxx:沒(méi)有這個(gè)文件或路徑 分析:頭文件不存在、或者頭文件拼寫(xiě)錯(cuò)誤、或者文件為只讀 fatal error C1903: unable to recover from previous error(s);stopping compilation
中文對(duì)照:(編譯錯(cuò)誤)無(wú)法從之前的錯(cuò)誤中恢復(fù),停止編譯 分析:引起錯(cuò)誤的原因很多,建議先修改之前的錯(cuò)誤 error C2001: newline in constant
中文對(duì)照:(編譯錯(cuò)誤)常量中創(chuàng)建新行 分析:字符串常量多行書(shū)寫(xiě) error C2006: #include expected a filename, found 'identifier'
中文對(duì)照:(編譯錯(cuò)誤)#include命令中需要文件名
分析:一般是頭文件未用一對(duì)雙引號(hào)或尖括號(hào)括起來(lái),例如“#include stdio.h” error C2007: #define syntax
中文對(duì)照:(編譯錯(cuò)誤)#define語(yǔ)法錯(cuò)誤
分析:例如“#define”后缺少宏名,例如“#define” error C2008: 'xxx' : unexpected in macro definition
中文對(duì)照:(編譯錯(cuò)誤)宏定義時(shí)出現(xiàn)了意外的xxx
分析:宏定義時(shí)宏名與替換串之間應(yīng)有空格,例如“#define TRUE“1”” error C2009: reuse of macro formal 'identifier'
中文對(duì)照:(編譯錯(cuò)誤)帶參宏的形式參數(shù)重復(fù)使用
分析:宏定義如有參數(shù)不能重名,例如“#define s(a,a)(a*a)”中參數(shù)a重復(fù) error C2010: 'character' : unexpected in macro formal parameter list
中文對(duì)照:(編譯錯(cuò)誤)帶參宏的形式參數(shù)表中出現(xiàn)未知字符 分析:例如“#define s(r|)r*r”中參數(shù)多了一個(gè)字符‘|’ error C2014: preprocessor command must start as first nonwhite space
中文對(duì)照:(編譯錯(cuò)誤)預(yù)處理命令前面只允許空格
分析:每一條預(yù)處理命令都應(yīng)獨(dú)占一行,不應(yīng)出現(xiàn)其他非空格字符 error C2015: too many characters in constant 中文對(duì)照:(編譯錯(cuò)誤)常量中包含多個(gè)字符 分析:字符型常量的單引號(hào)中只能有一個(gè)字符,或是以“”開(kāi)始的一個(gè)轉(zhuǎn)義字符,例如“char error = 'error';” error C2017: illegal escape sequence 中文對(duì)照:(編譯錯(cuò)誤)轉(zhuǎn)義字符非法
分析:一般是轉(zhuǎn)義字符位于 ' ' 或 “ ” 之外,例如“char error = ' 'n;” error C2018: unknown character '0xhh' 中文對(duì)照:(編譯錯(cuò)誤)未知的字符0xhh 分析:一般是輸入了中文標(biāo)點(diǎn)符號(hào),例如“char error = 'E';”中“;”為中文標(biāo)點(diǎn)符號(hào) error C2019: expected preprocessor directive, found 'character' 中文對(duì)照:(編譯錯(cuò)誤)期待預(yù)處理命令,但有無(wú)效字符
分析:一般是預(yù)處理命令的#號(hào)后誤輸入其他無(wú)效字符,例如“#!define TRUE 1” error C2021: expected exponent value, not 'character' 中文對(duì)照:(編譯錯(cuò)誤)期待指數(shù)值,不能是字符
分析:一般是浮點(diǎn)數(shù)的指數(shù)表示形式有誤,例如123.456E error C2039: 'identifier1' : is not a member of 'identifier2' 中文對(duì)照:(編譯錯(cuò)誤)標(biāo)識(shí)符1不是標(biāo)識(shí)符2的成員 分析:程序錯(cuò)誤地調(diào)用或引用結(jié)構(gòu)體、共用體、類(lèi)的成員 error C2041: illegal digit 'x' for base 'n' 中文對(duì)照:(編譯錯(cuò)誤)對(duì)于n進(jìn)制來(lái)說(shuō)數(shù)字x非法
分析:一般是八進(jìn)制或十六進(jìn)制數(shù)表示錯(cuò)誤,例如“int i = 081;”語(yǔ)句中數(shù)字‘8’不是八進(jìn)制的基數(shù) error C2048: more than one default 中文對(duì)照:(編譯錯(cuò)誤)default語(yǔ)句多于一個(gè)
分析:switch語(yǔ)句中只能有一個(gè)default,刪去多余的default
error C2050: switch expression not integral 中文對(duì)照:(編譯錯(cuò)誤)switch表達(dá)式不是整型的
分析:switch表達(dá)式必須是整型(或字符型),例如“switch(“a”)”中表達(dá)式為字符串,這是非法的 error C2051: case expression not constant 中文對(duì)照:(編譯錯(cuò)誤)case表達(dá)式不是常量
分析:case表達(dá)式應(yīng)為常量表達(dá)式,例如“case “a””中““a””為字符串,這是非法的 error C2052: 'type' : illegal type for case expression 中文對(duì)照:(編譯錯(cuò)誤)case表達(dá)式類(lèi)型非法
分析:case表達(dá)式必須是一個(gè)整型常量(包括字符型)error C2057: expected constant expression 中文對(duì)照:(編譯錯(cuò)誤)期待常量表達(dá)式
分析:一般是定義數(shù)組時(shí)數(shù)組長(zhǎng)度為變量,例如“int n=10;int a[n];”中n為變量,這是非法的 error C2058: constant expression is not integral 中文對(duì)照:(編譯錯(cuò)誤)常量表達(dá)式不是整數(shù) 分析:一般是定義數(shù)組時(shí)數(shù)組長(zhǎng)度不是整型常量 error C2059: syntax error : 'xxx' 中文對(duì)照:(編譯錯(cuò)誤)‘xxx’語(yǔ)法錯(cuò)誤
分析:引起錯(cuò)誤的原因很多,可能多加或少加了符號(hào)xxx error C2064: term does not evaluate to a function 中文對(duì)照:(編譯錯(cuò)誤)無(wú)法識(shí)別函數(shù)語(yǔ)言
分析:
1、函數(shù)參數(shù)有誤,表達(dá)式可能不正確,例如“sqrt(s(s-a)(s-b)(s-c));”中表達(dá)式不正確
2、變量與函數(shù)重名或該標(biāo)識(shí)符不是函數(shù),例如“int i,j;j=i();”中i不是函數(shù) error C2065: 'xxx' : undeclared identifier 中文對(duì)照:(編譯錯(cuò)誤)未定義的標(biāo)識(shí)符xxx 分析:
1、如果xxx為cout、cin、scanf、printf、sqrt等,則程序中包含頭文件有誤
2、未定義變量、數(shù)組、函數(shù)原型等,注意拼寫(xiě)錯(cuò)誤或區(qū)分大小寫(xiě)。error C2078: too many initializers 中文對(duì)照:(編譯錯(cuò)誤)初始值過(guò)多
分析:一般是數(shù)組初始化時(shí)初始值的個(gè)數(shù)大于數(shù)組長(zhǎng)度,例如“int b[2]={1,2,3};” error C2082: redefinition of formal parameter 'xxx' 中文對(duì)照:(編譯錯(cuò)誤)重復(fù)定義形式參數(shù)xxx 分析:函數(shù)首部中的形式參數(shù)不能在函數(shù)體中再次被定義 error C2084: function 'xxx' already has a body 中文對(duì)照:(編譯錯(cuò)誤)已定義函數(shù)xxx 分析:在VC++早期版本中函數(shù)不能重名,6.0版本中支持函數(shù)的重載,函數(shù)名可以相同但參數(shù)不一樣
error C2086: 'xxx' : redefinition 中文對(duì)照:(編譯錯(cuò)誤)標(biāo)識(shí)符xxx重定義 分析:變量名、數(shù)組名重名
error C2087: '
分析:一般是定義二維數(shù)組時(shí)未指定第二維的長(zhǎng)度,例如“int a[3][];”
error C2100: illegal indirection
中文對(duì)照:(編譯錯(cuò)誤)非法的間接訪問(wèn)運(yùn)算符“*” 分析:對(duì)非指針變量使用“*”運(yùn)算
error C2105: 'operator' needs l-value 中文對(duì)照:(編譯錯(cuò)誤)操作符需要左值
分析:例如“(a+b)++;”語(yǔ)句,“++”運(yùn)算符無(wú)效
error C2106: 'operator': left operand must be l-value 中文對(duì)照:(編譯錯(cuò)誤)操作符的左操作數(shù)必須是左值 分析:
例如“a+b=1;”語(yǔ)句,“=”運(yùn)算符左值必須為變量,不能是表達(dá)式
error C2110: cannot add two pointers 中文對(duì)照:(編譯錯(cuò)誤)兩個(gè)指針量不能相加
分析:例如“int *pa,*pb,*a;a = pa + pb;”中兩個(gè)指針變量不能進(jìn)行“+”運(yùn)算
error C2117: 'xxx' : array bounds overflow 中文對(duì)照:(編譯錯(cuò)誤)數(shù)組xxx邊界溢出
分析:一般是字符數(shù)組初始化時(shí)字符串長(zhǎng)度大于字符數(shù)組長(zhǎng)度,例如“char str[4] = “abcd”;”
error C2118: negative subscript or subscript is too large 中文對(duì)照:(編譯錯(cuò)誤)下標(biāo)為負(fù)或下標(biāo)太大
分析:一般是定義數(shù)組或引用數(shù)組元素時(shí)下標(biāo)不正確 error C2124: divide or mod by zero 中文對(duì)照:(編譯錯(cuò)誤)被零除或?qū)?求余 分析:例如“int i = 1 / 0;”除數(shù)為0
error C2133: 'xxx' : unknown size 中文對(duì)照:(編譯錯(cuò)誤)數(shù)組xxx長(zhǎng)度未知
分析:一般是定義數(shù)組時(shí)未初始化也未指定數(shù)組長(zhǎng)度,例如“int a[];”
error C2137: empty character constant。中文對(duì)照:(編譯錯(cuò)誤)字符型常量為空 分析:一對(duì)單引號(hào)“''”中不能沒(méi)有任何字符
error C2143: syntax error : missing 'token1' before 'token2'
error C2146: syntax 4error : missing 'token1' before identifier 'identifier' 中文對(duì)照:(編譯錯(cuò)誤)在標(biāo)識(shí)符或語(yǔ)言符號(hào)2前漏寫(xiě)語(yǔ)言符號(hào)1 分析:可能缺少“{”、“)”或“;”等語(yǔ)言符號(hào)
error C2144: syntax error : missing ')' before type 'xxx' 中文對(duì)照:(編譯錯(cuò)誤)在xxx類(lèi)型前缺少‘)’ 分析:一般是函數(shù)調(diào)用時(shí)定義了實(shí)參的類(lèi)型
error C2181: illegal else without matching if 中文對(duì)照:(編譯錯(cuò)誤)非法的沒(méi)有與if相匹配的else 分析:可能多加了“;”或復(fù)合語(yǔ)句沒(méi)有使用“{}”
error C2196: case value '0' already used 中文對(duì)照:(編譯錯(cuò)誤)case值0已使用 分析:case后常量表達(dá)式的值不能重復(fù)出現(xiàn)
error C2296: '%' : illegal, left operand has type 'float' 47 error C2297: '%' : illegal, right operand has type 'float' 中文對(duì)照:(編譯錯(cuò)誤)%運(yùn)算的左(右)操作數(shù)類(lèi)型為float,這是非法的
分析:求余運(yùn)算的對(duì)象必須均為int類(lèi)型,應(yīng)正確定義變量類(lèi)型或使用強(qiáng)制類(lèi)型轉(zhuǎn)換
error C2371: 'xxx' : redefinition;different basic types 中文對(duì)照:(編譯錯(cuò)誤)標(biāo)識(shí)符xxx重定義;基類(lèi)型不同 分析:定義變量、數(shù)組等時(shí)重名
error C2440: '=' : cannot convert from 'char [2]' to 'char' 中文對(duì)照:(編譯錯(cuò)誤)賦值運(yùn)算,無(wú)法從字符數(shù)組轉(zhuǎn)換為字符
分析:不能用字符串或字符數(shù)組對(duì)字符型數(shù)據(jù)賦值,更一般的情況,類(lèi)型無(wú)法轉(zhuǎn)換
error C2447: missing function header(old-style formal list?)51 error C2448: '
error C2450: switch expression of type 'xxx' is illegal 中文對(duì)照:(編譯錯(cuò)誤)switch表達(dá)式為非法的xxx類(lèi)型
分析:switch表達(dá)式類(lèi)型應(yīng)為int或char
error C2466: cannot allocate an array of constant size 0 中文對(duì)照:(編譯錯(cuò)誤)不能分配長(zhǎng)度為0的數(shù)組 分析:一般是定義數(shù)組時(shí)數(shù)組長(zhǎng)度為0
error C2601: 'xxx' : local function definitions are illegal 中文對(duì)照:(編譯錯(cuò)誤)函數(shù)xxx定義非法
分析:一般是在一個(gè)函數(shù)的函數(shù)體中定義另一個(gè)函數(shù)
error C2632: 'type1' followed by 'type2' is illegal 中文對(duì)照:(編譯錯(cuò)誤)類(lèi)型1后緊接著類(lèi)型2,這是非法的 分析:例如“int float i;”語(yǔ)句
error C2660: 'xxx' : function does not take n parameters 中文對(duì)照:(編譯錯(cuò)誤)函數(shù)xxx不能帶n個(gè)參數(shù) 分析:調(diào)用函數(shù)時(shí)實(shí)參個(gè)數(shù)不對(duì),例如“sin(x,y);”
error C2664: 'xxx' : cannot convert parameter n from 'type1' to 'type2' 中文對(duì)照:(編譯錯(cuò)誤)函數(shù)xxx不能將第n個(gè)參數(shù)從類(lèi)型1轉(zhuǎn)換為類(lèi)型2 分析:一般是函數(shù)調(diào)用時(shí)實(shí)參與形參類(lèi)型不一致
error C2676: binary '<<' : 'class istream_withassign' does not define this operator or a conversion to a type acceptable to the predefined operator error C2676: binary '>>' : 'class ostream_withassign' does not define this operator or a conversion to a type acceptable to the predefined operator 分析:“>>”、“<<”運(yùn)算符使用錯(cuò)誤,例如“cin<
error C4716: 'xxx' : must return a value 中文對(duì)照:(編譯錯(cuò)誤)函數(shù)xxx必須返回一個(gè)值
分析:僅當(dāng)函數(shù)類(lèi)型為void時(shí),才能使用沒(méi)有返回值的返回命令。
fatal error LNK1104: cannot open file “Debug/Cpp1.exe” 中文對(duì)照:(鏈接錯(cuò)誤)無(wú)法打開(kāi)文件Debug/Cpp1.exe 分析:重新編譯鏈接
fatal error LNK1168: cannot open Debug/Cpp1.exe for writing 中文對(duì)照:(鏈接錯(cuò)誤)不能打開(kāi)Debug/Cpp1.exe文件,以改寫(xiě)內(nèi)容。分析:一般是Cpp1.exe還在運(yùn)行,未關(guān)閉
fatal error LNK1169: one or more multiply defined symbols found 中文對(duì)照:(鏈接錯(cuò)誤)出現(xiàn)一個(gè)或更多的多重定義符號(hào)。分析:一般與error LNK2005一同出現(xiàn)
error LNK2001: unresolved external symbol _main 中文對(duì)照:(鏈接錯(cuò)誤)未處理的外部標(biāo)識(shí)main 分析:一般是main拼寫(xiě)錯(cuò)誤,例如“void mian()”
error LNK2005: _main already defined in Cpp1.obj 中文對(duì)照:(鏈接錯(cuò)誤)main函數(shù)已經(jīng)在Cpp1.obj文件中定義 分析:未關(guān)閉上一程序的工作空間,導(dǎo)致出現(xiàn)多個(gè)main函數(shù)
warning C4003: not enough actual parameters for macro 'xxx' 中文對(duì)照:(編譯警告)宏xxx沒(méi)有足夠的實(shí)參 分析:一般是帶參宏展開(kāi)時(shí)未傳入?yún)?shù)
warning C4067: unexpected tokens following preprocessor directive期待新行 分析:“#include
warning C4091: '' : ignored on left of 'type' when no variable is declared 中文對(duì)照:(編譯警告)當(dāng)沒(méi)有聲明變量時(shí)忽略類(lèi)型說(shuō)明 分析:語(yǔ)句“int;”未定義任何變量,不影響程序執(zhí)行
warning C4101: 'xxx' : unreferenced local variable 中文對(duì)照:(編譯警告)變量xxx定義了但未使用 分析:可去掉該變量的定義,不影響程序執(zhí)行
warning C4244: '=' : conversion from 'type1' to 'type2', possible loss of data 中文對(duì)照:(編譯警告)賦值運(yùn)算,從數(shù)據(jù)類(lèi)型1轉(zhuǎn)換為數(shù)據(jù)類(lèi)型2,可能丟失數(shù)據(jù)
分析:需正確定義變量類(lèi)型,數(shù)據(jù)類(lèi)型1為float或double、數(shù)據(jù)類(lèi)型2為int時(shí),結(jié)果有可能不正確,數(shù)據(jù)類(lèi)型1為double、數(shù)據(jù)類(lèi)型2為float時(shí),不影響程序結(jié)果,可忽略該警告
warning C4305: 'initializing' : truncation from 'const double' to 'float' 中文對(duì)照:(編譯警告)初始化,截取雙精度常量為float類(lèi)型 分析:出現(xiàn)在對(duì)float類(lèi)型變量賦值時(shí),一般不影響最終結(jié)果
warning C4390: ';' : empty controlled statement found;is this the intent? 中文對(duì)照:(編譯警告)‘;’控制語(yǔ)句為空語(yǔ)句,是程序的意圖嗎?
分析:if語(yǔ)句的分支或循環(huán)控制語(yǔ)句的循環(huán)體為空語(yǔ)句,一般是多加了“;”
warning C4508: 'xxx' : function should return a value;'void' return type assumed 中文對(duì)照:(編譯警告)函數(shù)xxx應(yīng)有返回值,假定返回類(lèi)型為void 分析:一般是未定義main函數(shù)的類(lèi)型為void,不影響程序執(zhí)行 c語(yǔ)言的錯(cuò)誤對(duì)照表———— 在遇到錯(cuò)誤時(shí)可以對(duì)照查看
warning C4552: 'operator' : operator has no effect;expected operator with side-effect 中文對(duì)照:(編譯警告)運(yùn)算符無(wú)效果;期待副作用的操作符 分析:例如“i+j;”語(yǔ)句,“+”運(yùn)算無(wú)意義
warning C4553: '==' : operator has no effect;did you intend '='? 中文對(duì)照:(編譯警告)“==”運(yùn)算符無(wú)效;是否為“=”? 分析:例如 “i==j;” 語(yǔ)句,“==”運(yùn)算無(wú)意義
warning C4700: local variable 'xxx' used without having been initialized 中文對(duì)照:(編譯警告)變量xxx在使用前未初始化
分析:變量未賦值,結(jié)果有可能不正確,如果變量通過(guò)scanf函數(shù)賦值,則有可能漏寫(xiě)“&”運(yùn)算符,或變量通過(guò)cin賦值,語(yǔ)句有誤
warning C4715: 'xxx' : not all control paths return a value 中文對(duì)照:(編譯警告)函數(shù)xxx不是所有的控制路徑都有返回值
分析:一般是在函數(shù)的if語(yǔ)句中包含return語(yǔ)句,當(dāng)if語(yǔ)句的條件不成立時(shí)沒(méi)有返回值
warning C4723: potential divide by 0 中文對(duì)照:(編譯警告)有可能被0除 分析:表達(dá)式值為0時(shí)不能作為除數(shù)
warning C4804: '<' : unsafe use of type 'bool' in operation 中文對(duì)照:(編譯警告)‘<’:不安全的布爾類(lèi)型的使用 分析:例如關(guān)系表達(dá)式“0<=x<10”有可能引起邏輯錯(cuò)誤