導航:首頁 > 源碼編譯 > c程序編譯錯誤分為哪兩類

c程序編譯錯誤分為哪兩類

發布時間:2023-02-09 12:14:35

㈠ 計算機二級C語言上機題目的評分標準是什麼編譯程序時,「錯誤」和「警告」分別代表什麼

錯誤:編譯不通過。或者判斷的人輸入了指定的數據,沒有得到想要的輸出結果。
警告:就是編譯時,編譯器輸出的告警信息。有告警不一定有錯。
扣分多少不知。

㈡ C語言的錯誤有哪幾類詳細點

C語言常見錯誤小結

C語言的最大特點是:功能強、使用方便靈活。C編譯的程序對語法檢查並不象其它高級語言那麼嚴格,這就給編程人員留下「靈活的餘地」,但還是由於這個靈活給程序的調試帶來了許多不便,尤其對初學C語言的人來說,經常會出一些連自己都不知道錯在哪裡的錯誤。看著有錯的程序,不知該如何改起,本人通過對C的學習,積累了一些C編程時常犯的錯誤,寫給各位學員以供參考。

1.書寫標識符時,忽略了大小寫字母的區別。main(){ int a=5;
printf("%d",A);}編譯程序把a和A認為是兩個不同的變數名,而顯示出錯信息。C認為大寫母
和小寫字母是兩個不同的字元。習慣上,符號常量名用大寫,變數名用小寫表示,以增加可讀性。

2.忽略了變數的類型,進行了不合法的運算。main(){float a,b; printf("%d",a%b);}%是求余運算,得到a/b的整余數。整型變數a和b可以進行求余運算,而實型變數則不允許進行「求余」運算。

3.將字元常量與字元串常量混淆。char c;c="a";在這里就混淆了字元常量與字元串常量,字元常量是由一對單引號括起來的單個字元,字元串常量是一對雙引號括起來的字元序列。C規定以「\」作字元串結束標志,它是由系統自動加上的,所以字元串「a」實際上包含兩個字元:『a'和『\',而把它賦給一個字元變數是不行的。

4.忽略了「=」與「==」的區別。在許多高級語言中,用「=」符號作為關系運算符「等於」。如在BASIC程序中
可以寫if (a=3) then …但C語言中,「=」是賦值運算符,「==」是關系運算符。如:if (a==3) a=b;前者是進行比較,a是否和3相等,後者表示如果a和3相等,把b值賦給a。由於習慣問題,初學者往往會犯這樣的錯誤。

5.忘記加分號。分號是C語句中不可缺少的一部分,語句末尾必須有分號。a=1b=2編譯時,編譯程序在「a=1」後面沒發現分號,就把下一行「b=2」也作為上一行語句的一部分,這就會出現語法錯誤。改錯時,有時在被指出有錯的一行中未發現錯誤,就需要看一下上一行是否漏掉了分號。{ z=x+y;t=z/100;printf("%f",t);}對於復合語句來說,最後一個語句中最後的分號不能忽略不寫(這是和PASCAL不同的)。

6.多加分號。對於一個復合語句,如:{ z=x+y;t=z/100;printf("%f",t);};復合語句的花括弧後不應再加分號,否則將會畫蛇添足。又如:if (a%3==0);I++;本是如果3整除a,則I加1。但由於if (a%3==0)後多加了分號,則if語句到此結束,程序將執行I++語句,不論3是否整除a,I都將自動加1。再如:for (I=0;I<5;I++);{scanf("%d",&x);printf("%d",x);}本意是先後輸入5個數,每輸入一個數後再將它輸出。由於for()後多加了一個分號,使循環體變為空語句,此時只能輸入一個數並輸出它。
7.輸入變數時忘記加地址運算符「&」。int a,b;scanf("%d%d",a,b);
這是不合法的。Scanf函數的作用是:按照a、b在內存的地址將a、b的值存進去。「&a」指a在內存中的地址。

8.輸入數據的方式與要求不符。①scanf("%d%d",&a,&b);輸入時,不能用逗號作兩個數據間的分隔符,如下面輸入不合法:3,4�輸入數據時,在兩個數據之間以一個或多個空格間隔,也可用回車鍵,跳格鍵tab。②scanf("%d,%d",&a,&b);C規定:如果在「格式控制」字元串中除了格式說明以外還有其它字元,則在輸入數據時應輸入與這些字元相同的字元。下面輸入是合法的:3,4�此時不用逗號而用空格或其它字元是不對的。3 4� 3:4�又如:scanf("a=%d,b=%d",&a,&b);輸入應如以下形式:a=3,b=4�
9.輸入字元的格式與要求不一致。在用「%c」格式輸入字元時,「空格字元」和「轉義字元」都作為有效字元輸入。scanf("%c%c%c",&c1,&c2,&c3);如輸入a b c�字元「a」送給c1,字元「 」送給c2,字元「b」送給c3,因為%c只要求讀入一個字元,後面不需要用空格作為兩個字元的間隔。

10.輸入輸出的數據類型與所用格式說明符不一致。例如,a已定義為整型,b定義為實型a=3;b=4.5;printf("%f%d\n",a,b);編譯時不給出出錯信息,但運行結果將與原意不符。這種錯誤尤其需要注意。

11.輸入數據時,企圖規定精度。scanf("%7.2f",&a);這樣做是不合法的,輸入數據時不能規定精度。

12.switch語句中漏寫break語句。例如:根據考試成績的等級列印出百分制數段。switch(grade){ case 'A':printf("85~100\n");case 'B':printf("70~84\n");case 'C':printf("60~69\n");case 'D':printf("<60\n");default:printf("error\n");由於漏寫了break語句,case只起標號的作用,而不起判斷作用。因此,當grade值為A時,printf函數在執行完第一個語句後接著執行第二、三、四、五個printf函數語句。正確寫法應在每個分支後再加上「break;」。例如case 'A':printf("85~100\n");break;

13.忽視了while和do-while語句在細節上的區別。(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);}可以看到,當輸入I的值小於或等於10時,二者得到的結果相同。而當I>10時,二者結果就不同了。因為while循環是先判斷後執行,而do-while循環是先執行後判斷。對於大於10的數while循環一次也不執行循環體,而do-while語句則要執行一次循環體。

14.定義數組時誤用變數。int n;
scanf("%d",&n);int a[n];數組名後用方括弧括起來的是常量表達式,可以包括常量和符號常量。即C不允許對數組的大小作動態定義。
15.在定義數組時,將定義的「元素個數」誤認為是可使的最大下標值。main(){static int a[10]={1,2,3,4,5,6,7,8,9,10};printf("%d",a[10]);}C語言規定:定義時用a[10],表示a數組有10個元素。其下標值由0開始,所以數組元素a[10]是不存在的。
16.初始化數組時,未使用靜態存儲。int a[3]={0,1,2};這樣初始化數組是不對的。C語言規定只有靜態存儲(static)數組和外部存儲(exterm)數組才能初始化。應改為:static int a[3]={0,1,2};17.在不應加地址運算符&的位置加了地址運算符。
scanf("%s",&str);C語言編譯系統對數組名的處理是:數組名代表該數組的起始地址,且scanf函數中的輸入項是字元數組名,不必要再加地址符&。應改為:scanf("%s",str);18.同時定義了形參和函數中的局部變數。int max(x,y)int x,y,z;{z=x>y?x:y;return(z);}形參應該在函數體外定義,而局部變數應該在函數體內定義。應改為:int max(x,y)int x,y;{int z;z=x>y?x:y;return(z);}

㈢ 有關C和C++中錯誤信息提示

有兩個TC2.0的出錯提示,沒有TC++的,也沒有VC的,如果是VC++,可以用金山詞霸查。

TC 2.0編譯錯誤信息

說明:Turbo C 的源程序錯誤分為三種類型:致命錯誤、一般錯誤和警告。其中,致命錯誤通常是內部編譯出錯;一般錯誤指程序的語法錯誤、磁碟或內存存取錯誤或命令行錯誤等;警告則只是指出一些得懷疑的情況,它並不防止編譯的進行。

下面按字母順序A~Z分別列出致命錯誤及一般錯誤信息,英漢對照及處理方法:

(一)、致命錯誤英漢對照及處理方法:

A-B致命錯誤

Bad call of in-line function (內部函數非法調用)
分析與處理:在使用一個宏定義的內部函數時,沒能正確調用。一個內部函數以兩個下劃線(__)開始和結束。

Irrecable expression tree (不可約表達式樹)
分析與處理:這種錯誤指的是文件行中的表達式太復雜,使得代碼生成程序無法為它生成代碼。這種表達式必須避免使用。

Register allocation failure (存儲器分配失敗)
分析與處理:這種錯誤指的是文件行中的表達式太復雜,代碼生成程序無法為它生成代碼。此時應簡化這種繁雜的表達式或乾脆避免使用它。

(二)、一般錯誤信息英漢照及處理方法

#operator not followed by maco argument name(#運算符後沒跟宏變元名)
分析與處理:在宏定義中,#用於標識一宏變串。「#」號後必須跟一個宏變元名。

'xxxxxx' not anargument ('xxxxxx'不是函數參數)'
分析與處理:在源程序中將該標識符定義為一個函數參數,但此標識符沒有在函數中出現。

Ambiguous symbol 'xxxxxx' (二義性符號'xxxxxx')
分析與處理:兩個或多個結構的某一域名相同,但具有的偏移、類型不同。在變數或表達式中引用該域而未帶結構名時,會產生二義性,此時需修改某個域名或在引用時加上結構名。

Argument # missing name (參數#名丟失)
分析與處理:參數名已脫離用於定義函數的函數原型。如果函數以原型定義,該函數必須包含所有的參數名。

Argument list syntax error (參數表出現語法錯誤)
分析與處理:函數調用的參數間必須以逗號隔開,並以一個右括弧結束。若源文件中含有一個其後不是逗號也不是右括弧的參數,則出錯。

Array bounds missing (數組的界限符"]"丟失)
分析與處理:在源文件中定義了一個數組,但此數組沒有以下右方括弧結束。

Array size too large (數組太大)
分析與處理:定義的數組太大,超過了可用內存空間。

Assembler statement too long (匯編語句太長)
分析與處理:內部匯編語句最長不能超過480位元組。

Bad configuration file (配置文件不正確)
分析與處理:TURBOC.CFG配置文件中包含的不是合適命令行選擇項的非註解文字。配置文件命令選擇項必須以一個短橫線開始。

Bad file name format in include directive(包含指令中文件名格式不正確)
分析與處理:包含文件名必須用引號("filename.h")或尖括弧(<文件名>)括起來,否則將產生本類錯誤。如果使用了宏,則產生的擴展文本也不正確,因為無引號沒辦法識別。

Bad ifdef directive syntax (ifdef指令語法錯誤)
分析與處理:#ifdef必須以單個標識符(只此一個)作為該指令的體。

Bad ifndef directive syntax (ifndef指令語法錯誤)
分析與處理:#ifndef 必須以單個標識符(只此一個)作為該指令的體。

Bad undef directive syntax (undef指令語法錯誤)
分析與處理:#undef指令必須以單個標識符(只此一個)作為該指令的體。

Bad file size syntax (位欄位長語法錯誤)
分析與處理:一個位欄位長必須是1—16位的常量表達式。

Call of non-functin (調用未定義函數)
分析與處理:正被調用的函數無定義,通常是由於不正確的函數聲明或函數名拼錯而造成。

Cannot modify a const object (不能修改一個長量對象)
分析與處理:對定義為常量的對象進行不合法操作(如常量賦值)引起本錯誤。

Case outside of switch (Case 出現在switch外)
分析與處理:編譯程序發現Case語句出現在switch語句之外,這類故障通常是由於括弧不匹配造成的。

Case statement missing (Case語句漏掉)
分析與處理:Case語必須包含一個以冒號結束的常量表達式,如果漏了冒號或在冒號前多了其它符號,則會出現此類錯誤。

Character constant too long (字元常量太長)
分析與處理:字元常量的長度通常只能是一個或兩個字元長,超過此長度則會出現這種錯誤。

Compound statement missing (漏掉復合語句)
分析與處理:編譯程序掃描到源文件未時,未發現結束符號 (大括弧),此類故障通常是由於大括弧不匹配所致。

Conflicting type modifiers (類型修飾符沖突)
分析與處理:對同一指針,只能指定一種變址修飾符(如near 或far);而對於同一函數,也只能給出一種語言修飾符(如Cdecl、pascal或interrupt)。

Constant expression required (需要常量表達式)
分析與處理:數組的大小必須是常量,本錯誤通常是由於#define常量的拼寫錯誤引起。

Could not find file 'xxxxxx.xxx' (找不到'xxxxxx.xx'文件)
分析與處理:編譯程序找不到命令行上給出的文件。

Declaration missing (漏掉了說明)
分析與處理:當源文件中包含了一個struct或 union域聲明,而後面漏掉了分號,則會出現此類錯誤。

Declaration needs type or storage class(說明必須給出類型或存儲類)
分析與處理:正確的變數說明必須指出變數類型,否則會出現此類錯誤。

Declaration syntax error (說明出現語法錯誤)
分析與處理:在源文件中,若某個說明丟失了某些符號或輸入多餘的符號,則會出現此類錯誤。

Default outside of switch (Default語句在switch語句外出現)
分析與處理:這類錯誤通常是由於括弧不匹配引起的。

Define directive needs an identifier (Define指令必須有一個標識符)
分析與處理:#define 後面的第一個非空格符必須是一個標識符,若該位置出現其它字元,則會引起此類錯誤。

Division by zero (除數為零)
分析與處理:當源文件的常量表達式出現除數為零的情況,則會造成此類錯誤。

Do statement must have while (do語句中必須有While關鍵字)
分析與處理:若源文件中包含了一個無While關鍵字的 do語句,則出現本錯誤。

DO while statement missing ( (Do while語句中漏掉了符號"(")
分析與處理:在do語句中,若 while關鍵字後無左括弧,則出現本錯誤。

Do while statement missing;(Do while語句中掉了分號)
分析與處理:在DO語句的條件表達式中,若右括弧後面無分號則出現此類錯誤。

Duplicate Case (Case情況不唯一)
分析與處理:Switch語句的每個case必須有一個唯一的常量表達式值。否則導致此類錯誤發生。

Enum syntax error (Enum語法錯誤)
分析與處理:若enum說明的標識符表格式不對,將會引起此類錯誤發生。

Enumeration constant syntax error (枚舉常量語法錯誤)
分析與處理:若賦給enum類型變數的表達式值不為常量,則會導致此類錯誤發生。

Error Directive : xxxx (Error指令:xxxx)
分析與處理:源文件處理#error指令時,顯示該指令指出的信息。

Error Writing output file (寫輸出文件錯誤)
分析與處理:這類錯誤通常是由於磁碟空間已滿,無法進行寫入操作而造成。

Expression syntax error (表達式語法錯誤)
分析與處理:本錯誤通常是由於出現兩個連續的操作符,括弧不匹配或缺少括弧、前一語句漏掉了分號引起的。

Extra parameter in call (調用時出現多餘參數)
分析與處理:本錯誤是由於調用函數時,其實際參數個數多於函數定義中的參數個數所致。

Extra parameter in call to xxxxxx(調用xxxxxxxx函數時出現了多餘參數)

File name too long (文件名太長)
分析與處理:#include指令給出的文件名太長,致使編譯程序無法處理,則會出現此類錯誤。通常DOS下的文件名長度不能超過 64個字元。

For statement missing ) (For語名缺少")")
分析與處理:在 for語句中,如果控製表達式後缺少右括弧,則會出現此類錯誤。

For statement missing( (For語句缺少"(")

For statement missing; (For 語句缺少";")
分析與處理:在 for語句中,當某個表達式後缺少分號,則會出現此類錯誤。

Function call missing) (函數調用缺少")")
分析與處理:如果函數調用的參數表漏掉了右手括弧或括弧不匹配,則會出現此類錯誤。

Function definition out ofplace (函數定義位置錯誤)

Function doesn't take a variable number of argument(函數不接受可變的參數個數)

Goto statement missing label (Goto語句缺少標號)

If statement missing( (If語句缺少"(")

If statement missing) (If語句缺少")")

lllegal initalization (非法初始化)

lllegal octal digit (非法八進制數)
分析與處理:此類錯誤通常是由於八進制常數中包含了非八進制數字所致。

lllegal pointer subtraction (非法指針相減)

lllegal structure operation (非法結構操作)

lllegal use of floating point (浮點運算非法)

lllegal use of pointer (指針使用非法)

Improper use of a typedef symbol (typedef符號使用不當)

Incompatible storage class (不相容的存儲類型)

Incompatible type conversion (不相容的類型轉換)

Incorrect commadn line argument:xxxxxx (不正確的命令行參數:xxxxxxx)

Incorrect commadn file argument:xxxxxx (不正確的配置文件參數:xxxxxxx)

Incorrect number format (不正確的數據格式)

Incorrect use of default (deflult不正確使用)

Initializer syntax error (初始化語法錯誤)

Invaild indrection (無效的間接運算)

Invalid macro argument separator (無效的宏參數分隔符)

Invalid pointer addition (無效的指針相加)

Invalid use of dot (點使用錯)

Macro argument syntax error (宏參數語法錯誤)

Macro expansion too long (宏擴展太長)

Mismatch number of parameters in definition(定義中參數個數不匹配)

Misplaced break (break位置錯誤)

Misplaced continue (位置錯)

Misplaced decimal point (十進制小數點位置錯)

Misplaced else (else 位置錯)

Misplaced else driective (clse指令位置錯)

Misplaced endif directive (endif指令位置錯)

Must be addressable (必須是可編址的)

Must take address of memory location (必須是內存一地址)

No file name ending (無文件終止符)

No file names given (未給出文件名)

Non-protable pointer assignment (對不可移植的指針賦值)

Non-protable pointer comparison (不可移植的指針比較)

Non-protable return type conversion (不可移植的返回類型轉換)

Not an allowed type (不允許的類型)

Out of memory (內存不夠)

Pointer required on left side of (操作符左邊須是一指針)

Redeclaration of 'xxxxxx' ('xxxxxx'重定義)

Size of structure or array not known (結構或數組大小不定)

Statement missing; (語句缺少「;」)

Structure or union syntax error (結構或聯合語法錯誤)

Structure size too large (結構太大)

Subscription missing ] (下標缺少『]』)

Switch statement missing ( (switch 語句缺少"(")

Switch statement missing ) (switch 語句缺少")")

Too few parameters in call (函數調用參數太少)

Too few parameter in call to'xxxxxx'(調用'xxxxxx'時參數太少)

Too many cases (Cases太多)

Too many decimal points (十進制小數點太多)

Too many default cases (defaut太多)

Too many exponents (階碼太多)

Too many initializers (初始化太多)

Too many storage classes in declaration (說明中存儲類太多)

Too many types in decleration (說明中類型太多)

Too much auto memory in function (函數中自動存儲太多)

Too much global define in file (文件中定義的全局數據太多)

Two consecutive dots (兩個連續點)

Type mismatch in parameter # (參數"#"類型不匹配)

Type mismatch in parameter # in call to 'XXXXXXX' (調用'XXXXXXX'時參數#類型不匹配)

Type missmatch in parameter 'XXXXXXX' (參數'XXXXXXX'類型不匹配)

Type mismatch in parameter 'YYYYYYYY' in call to 'YYYYYYYY'(調用'YYYYYYY'時參數'XXXXXXXX'數型不匹配)

Type mismatch in redeclaration of 'XXX' (重定義類型不匹配)

Unable to creat output file 'XXXXXXXX.XXX' (不能創建輸出文件'XXXXXXXX.XXX')

Unable to create turboc.lnk (不能創建turboc.lnk )

Unable to execute command 'xxxxxxxx'(不能執行'xxxxxxxx'命令)

Unable to open include file 'xxxxxxx.xxx' (不能打開包含文件'xxxxxxxx.xxx')

Unable to open inputfile 'xxxxxxx.xxx' (不能打開輸入文件'xxxxxxxx.xxx')

Undefined label 'xxxxxxx' (標號'xxxxxxx'未定義)

Undefined structure 'xxxxxxxxx' (結構'xxxxxxxxxx'未定義)

Undefined symbol 'xxxxxxx' (符號'xxxxxxxx'未定義)

Unexpected end of file in comment started on line #(源文件在某個注釋中意外結束)

Unexpected end of file in conditional stated on line # (源文件在#行開始的條件語句中意外結束)

Unknown preprocessor directive 'xxx' (不認識的預處理指令:'xxx')Untermimated character constant (未終結的字元常量)

Unterminated string (未終結的串)

Unterminated string or character constant(未終結的串或字元常量)

User break (用戶中斷)

Value required (賦值請求)

While statement missing ( (While語句漏掉 '(')

While statement missing ) (While語句漏掉 ')')

Wrong number of arguments in of 'xxxxxxxx' (調用'xxxxxxxx'時參數個數錯誤)
----------------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
較簡練的出錯說明

TC出錯信息一覽
ambiguous operators need parentheses
不明確的運算需要用括弧括起
ambiguous symbol ''xxx''
不明確的符號
argument list syntax error
參數表語法錯誤
array bounds missing
丟失數組界限符
array size toolarge
數組尺寸太大
bad character in paramenters
參數中有不適當的字元
bad file name format in include directive
包含命令中文件名格式不正確
bad ifdef directive synatax
編譯預處理ifdef有語法錯
bad undef directive syntax
編譯預處理undef有語法錯
bit field too large
位欄位太長
call of non-function
調用未定義的函數
call to function with no prototype
調用函數時沒有函數的說明
cannot modify a const object
不允許修改常量對象
case outside of switch
漏掉了case 語句
case syntax error
case 語法錯誤
code has no effect
代碼不可述不可能執行到
compound statement missing{
分程序漏掉"{"
conflicting type modifiers
不明確的類型說明符
constant expression required
要求常量表達式
constant out of range in comparison
在比較中常量超出范圍
conversion may lose significant digits
轉換時會丟失意義的數字
conversion of near pointer not allowed
不允許轉換近指針
could not find file ''xxx''
找不到xxx文件
declaration missing ;
說明缺少";"
declaration syntax error
說明中出現語法錯誤
default outside of switch
default 出現在switch語句之外
define directive needs an identifier
定義編譯預處理需要標識符
division by zero
用零作除數
do statement must have while
do-while語句中缺少while部分
enum syntax error
枚舉類型語法錯誤
enumeration constant syntax error
枚舉常數語法錯誤
error directive :xxx
錯誤的編譯預處理命令
error writing output file
寫輸出文件錯誤
expression syntax error
表達式語法錯誤
extra parameter in call
調用時出現多餘錯誤
file name too long
文件名太長
function call missing )
函數調用缺少右括弧
fuction definition out of place
函數定義位置錯誤
fuction should return a value
函數必需返回一個值
goto statement missing label
goto語句沒有標號
hexadecimal or octal constant too large
16進制或8進制常數太大
illegal character ''x''
非法字元x
illegal initialization
非法的初始化
illegal octal digit
非法的8進制數字
illegal pointer subtraction
非法的指針相減
illegal structure operation
非法的結構體操作
illegal use of floating point
非法的浮點運算
illegal use of pointer
指針使用非法
improper use of a typedefsymbol
類型定義符號使用不恰當
in-line assembly not allowed
不允許使用行間匯編
incompatible storage class
存儲類別不相容
incompatible type conversion
不相容的類型轉換
incorrect number format
錯誤的數據格式
incorrect use of default
default使用不當
invalid indirection
無效的間接運算
invalid pointer addition
指針相加無效
irrecible expression tree
無法執行的表達式運算
lvalue required
需要邏輯值0或非0值
macro argument syntax error
宏參數語法錯誤
macro expansion too long
宏的擴展以後太長
mismatched number of parameters in definition
定義中參數個數不匹配
misplaced break
此處不應出現break語句
misplaced continue
此處不應出現continue語句
misplaced decimal point
此處不應出現小數點
misplaced elif directive
不應編譯預處理elif
misplaced else
此處不應出現else
misplaced else directive
此處不應出現編譯預處理else
misplaced endif directive
此處不應出現編譯預處理endif
must be addressable
必須是可以編址的
must take address of memory location
必須存儲定位的地址
no declaration for function ''xxx''
沒有函數xxx的說明
no stack
缺少堆棧
no type information
沒有類型信息
non-portable pointer assignment
不可移動的指針(地址常數)賦值
non-portable pointer comparison
不可移動的指針(地址常數)比較
non-portable pointer conversion
不可移動的指針(地址常數)轉換
not a valid expression format type
不合法的表達式格式
not an allowed type
不允許使用的類型
numeric constant too large
數值常太大
out of memory
內存不夠用
parameter ''xxx'' is never used
能數xxx沒有用到
pointer required on left side of ->
符號->的左邊必須是指針
possible use of ''xxx'' before definition
在定義之前就使用了xxx(警告)
possibly incorrect assignment
賦值可能不正確
redeclaration of ''xxx''
重復定義了xxx
redefinition of ''xxx'' is not identical
xxx的兩次定義不一致
register allocation failure
寄存器定址失敗
repeat count needs an lvalue
重復計數需要邏輯值
size of structure or array not known
結構體或數給大小不確定
statement missing ;
語句後缺少";"
structure or union syntax error
結構體或聯合體語法錯誤
structure size too large
結構體尺寸太大
sub scripting missing ]
下標缺少右方括弧
superfluous & with function or array
函數或數組中有多餘的"&"
suspicious pointer conversion
可疑的指針轉換
symbol limit exceeded
符號超限
too few parameters in call
函數調用時的實參少於函數的參數不
too many default cases
default太多(switch語句中一個)
too many error or warning messages
錯誤或警告信息太多
too many type in declaration
說明中類型太多
too much auto memory in function
函數用到的局部存儲太多
too much global data defined in file
文件中全局數據太多
two consecutive dots
兩個連續的句點
type mismatch in parameter xxx
參數xxx類型不匹配
type mismatch in redeclaration of ''xxx''
xxx重定義的類型不匹配
unable to create output file ''xxx''
無法建立輸出文件xxx
unable to open include file ''xxx''
無法打開被包含的文件xxx
unable to open input file ''xxx''
無法打開輸入文件xxx
undefined label ''xxx''
沒有定義的標號xxx
undefined structure ''xxx''
沒有定義的結構xxx
undefined symbol ''xxx''
沒有定義的符號xxx
unexpected end of file in comment started on line xxx
從xxx行開始的註解尚未結束文件不能結束
unexpected end of file in conditional started on line xxx
從xxx 開始的條件語句尚未結束文件不能結束
unknown assemble instruction
未知的匯編結構
unknown option
未知的操作
unknown preprocessor directive: ''xxx''
不認識的預處理命令xxx
unreachable code
無路可達的代碼
unterminated string or character constant
字元串缺少引號
user break
用戶強行中斷了程序
void functions may not return a value
void類型的函數不應有返回值
wrong number of arguments
調用函數的參數數目錯
''xxx'' not an argument
xxx不是參數
''xxx'' not part of structure
xxx不是結構體的一部分
xxx statement missing (
xxx語句缺少左括弧
xxx statement missing )
xxx語句缺少右括弧
xxx statement missing ;
xxx缺少分號
xxx'' declared but never used
說明了xxx但沒有使用
xxx'' is assigned a value which is never used
給xxx賦了值但未用過
zero length structure
結構體的長度為零

㈣ c語言 程序文件的編譯錯誤分哪為兩類

編譯錯誤和連接錯誤吧

大約是這樣

㈤ 程序的錯誤主要有兩種,哪種編譯器可以發現的

程序的錯誤主要有兩種,一種是編譯錯誤,一種是鏈接錯誤。
編譯錯誤是編譯器可以發現的。

㈥ 關於C語言在編譯時常出現的錯誤有哪些

1、fatal error C1010: unexpected end of file while looking for precompiled header directive。

尋找預編譯頭文件路徑時遇到了不該遇到的文件尾。(一般是沒有#include "stdafx.h")

2、fatal error C1083: Cannot open include file: 'R…….h': No such file or directory

不能打開包含文件「R…….h」:沒有這樣的文件或目錄。

3、error C2011: 'C……': 'class' type redefinition

類「C……」重定義。

4、error C2018: unknown character '0xa3'

不認識的字元'0xa3'。(一般是漢字或中文標點符號)

5、error C2057: expected constant expression

希望是常量表達式。(一般出現在switch語句的case分支中)

6、error C2065: 'IDD_MYDIALOG' : undeclared identifier

「IDD_MYDIALOG」:未聲明過的標識符。

7、error C2082: redefinition of formal parameter 'bReset'

函數參數「bReset」在函數體中重定義。

8、error C2143: syntax error: missing ':' before '{'

句法錯誤:「{」前缺少「;」。

9、error C2146: syntax error : missing ';' before identifier 'dc'

句法錯誤:在「dc」前丟了「;」。

10、error C2196: case value '69' already used

值69已經用過。(一般出現在switch語句的case分支中)

11、error C2509: 'OnTimer' : member function not declared in 'CHelloView'

成員函數「OnTimer」沒有在「CHelloView」中聲明。

12、error C2511: 'reset': overloaded member function 'void (int)' not found in 'B'

重載的函數「void reset(int)」在類「B」中找不到。

13、error C2555: 'B::f1': overriding virtual function differs from 'A::f1' only by return type or calling convention

類B對類A中同名函數f1的重載僅根據返回值或調用約定上的區別。

14、error C2660: 'SetTimer' : function does not take 2 parameters

「SetTimer」函數不傳遞2個參數。

15、warning C4035: 'f……': no return value

「f……」的return語句沒有返回值。

16、warning C4553: '= =' : operator has no effect; did you intend '='?

沒有效果的運算符「= =」;是否改為「=」?

17、warning C4700: local variable 'bReset' used without having been initialized

局部變數「bReset」沒有初始化就使用。

18、error C4716: 'CMyApp::InitInstance' : must return a value

「CMyApp::InitInstance」函數必須返回一個值。

19、LINK : fatal error LNK1168: cannot open Debug/P1.exe for writing

連接錯誤:不能打開P1.exe文件,以改寫內容。(一般是P1.Exe還在運行,未關閉)

20、error LNK2001: unresolved external symbol "public: virtual _ _thiscall C……::~C……(void)"

連接時發現沒有實現的外部符號(變數、函數等)。

function call missing argument list 調用函數的時候沒有給參數。

member function definition looks like a ctor, but name does not match enclosing class 成員函數聲明了但沒有使用

unexpected end of file while looking for precompiled header directive 在尋找預編譯頭文件時文件意外結束,編譯不正常終止可能造成這種情況

㈦ c語言源程序在編譯,鏈接,運行時,可能發生的錯誤類型有哪些

剛畢業時也是很迷茫,但是我很幸運的是我遇到了我的幸福之星,他是一個非常牛的人。其實C和C++是一個想學編程的最好的入門語言。但是如果你要走這條路的話那你可要准備做好受打擊了心裡准備了,因為這兩門語言的確是很難的,要學的的話你至少要學四到五年才能去做一些東西。它倆都是和底層打交道的,所以要考慮計算機硬體的一些東西。除此之外你還要懂好多的,不過任何事都一樣難學肯定是學出山也很牛了,是這樣的你可以看看美國微軟的程序員不就是搞底層開發的嗎?當然對這兩門語言你做到這樣就可以了。對C你只要把譚浩強《C程序設計》上的每一道題練的很熟就可以了,一定要記得只有你自己編出來才是你的,看懂的永遠也不是你的。對於C++它不是練你的編程的邏輯思維的,而是讓你有一個面向對象的思想。你要做的是不停的去思考。還有等你學完之後,可試著朝「B/S模式」開發應用發展。當然這只是我的意見。我覺的咱現在還是以掙錢為主,其他的以後再說了,你覺的呢。最後祝你學業有成!好了就給你說到此了。有問題網路見!

㈧ C語言考試技巧

一.特點和注意事項 1、填空題
(1)上機填空題一般包含2個(或3個)空。 (2)要填空的位置用___、___、___表示。
(3)考生在考試時應刪除標識___、___、___後填入相應的符號。
特別要注意的是:只能在要填空的位置上進行修改,不要添行、刪除、合並或分解,不要改動程序行的順序,更不要自己另編程序。 2.改錯題
(1)上機改錯題中有2個(或3個)錯誤需要修改。
(2)試題中用「/******found******/」來提示在下一行(或下面第二行)有錯。 (3)錯誤的性質基本分為語法錯誤和邏輯錯誤,也有些試題要求把語句添加在下劃線處。
(4)特別要注意的是:只能在出錯的行上進行修 二.做題技巧
以下是對上機考試改錯題的做題方法和總結,改錯題的錯誤主要分為以下幾類:
一般情況,錯誤主要分為語法錯誤和邏輯錯誤。
先檢查語法錯誤,編譯程序後發現沒有錯誤及警告,說明沒有語法錯誤,只有邏輯錯誤;邏輯錯誤必須根據程序的功能及預期結果來考查。
因此,對於程序改錯題,應先編譯查找其中的語法錯誤,通過編譯器的提示容易找到錯誤的地方及原因,然後再尋找邏輯錯誤。修改了語法錯誤後再次編譯,直到修改完所有的語法錯誤。而查找邏輯錯誤時,需要運行程序根據結果來檢查。
1、if或while語句
若錯誤行是if或者while語句,則要注意以下點: 1)首先判斷是否正確書寫if或while關鍵字;
2)然後看有沒有用小括弧把整個表達式括起來,若沒有則加上小括弧; 3)若條件表達式中有指針變數而且沒有指針運算符時,則加上指針運算符; 4)若if條件表達式中只有一個等於號即數學等號(=),則要改寫成兩個等於號即邏輯等號(==);
若if條件表達式為其他的比較運算符,則一般是進行逆轉或加一個等於號; 2、for語句
若錯誤行是for語句,則要注意以下幾點: 1)首先判斷for有沒有書寫正確;
2)然後看for中的表達式是不是用分號(;)隔開,若不是則改為分號。 3、記住是分號(;),不是逗號(,)!
再者,分析for中的三個表達式,是否符合題意; 第一個表達式表示起始條件, 第二個表達式表示終止條件,
第三個表達式表示循環變數的變化。 4、return語句
若錯誤行為return語句,則要注意以下幾點: 1)首先看是不是正確書寫return關鍵字;
2)然後看是不是缺少分號,若是則加上分號即可;

3)再者判斷return後的變數或表達式是否正確;
這種錯誤需要根據題意來分析,分析返回變數或表達式的值和類型。 5、賦值語句
若錯誤行是賦值語句,則要看賦值是否正確,然後看賦值運算符是否寫正確。 6、定義語句
若錯誤行是定義語句,則要注意: 1)首先分析變數類型是否符合;
2)然後分析賦初值是否正確,求和初值賦0,求積初值賦1;
3)若以上均不是,則看是不是少定義了某個變數或少了花括弧; 7、關鍵字拼寫錯誤。如:main-mian(錯誤) printf - pirntf (錯誤)
Return- return(錯誤) while- While (錯誤)
8、表達式錯誤問題
表達式錯誤占的份量最多,並且沒有統一的改法,我們只能通過題目要求來分析並修改),
1)若錯誤行中有整數1除以某個表達式或變數時,必須把整數1改為1.0;若變數或表達式是整型時,則只能進行強制類型轉換。
2)變數必須先賦值,後才參與運算,沒有賦值就不能參與運算;例如,long k;k*=num%10;
3)運算符書寫錯誤,例如,把/寫成\(num\=10);,==寫成=。 4)丟失括弧() 9、字元串類問題
1)若錯誤行中有字元串結束符,則特別要要注意結束符有沒有寫錯(『\0』不要寫成"\0」)。
2)新組建的字元串一定要加結束標識符(『\0』); 3)要區分清楚字元『o』和數字『0』。
4)字元串復制、比較必須使用用字元串處理函數(strcpy或strcmp)實現,不能用賦值語句或關系運算符。 10、指針類問題
若錯誤行中有指針變數,並且該變數名之前沒有指針運算符,則般都是加上指針運算符;即注意p和*p的區別; 11、函數首部類問題:
若錯誤行是函數首部,則要注意:
1)首先看該行最後有沒有分號,若有則刪掉分號;若中間有分號則要改為逗號;
2)形參和實參類型不一致問題
① 若實參是個地址或數組名或指針變數名,則對應的形參肯定是指針或數組;
②若實參是二維數組名,則對應的形參應該是指針數組或是二維數組; ③若後面用到形參時有指針運算符,則該形參應為指針類型;
④若形參是二維數組或指向M 個元素的指針變數,則該二維的長度必須與main中對於數組的第二維的長度相同。 3)函數類型不一致問題
①若函數中沒有return語句,則函數類型為void;

②若函數中有ret urn語句,則函數的類型必須與rerun後的變數類型一致;
記住,調用函數的類型與main中的該函數的類型一致! 12、語法錯誤問題:
1)語句缺少分號。若錯誤號中語句沒有以分號結束則加上分號;
2)變數名不一致。C語言是區分大小寫的,若錯誤行中有大寫字母一般都改為小寫字母;
3)若錯誤行中有一條橫線,則必須將橫線刪除再填空。填空題中亦是如此。 13、邏輯錯誤問題:
這種題型主要是表達式錯誤,占的題量比較多而且沒有統一的做題方法,需要我們具體問題具體分析。對於邏輯錯誤,可按下列步驟查找:
①先讀試題,看清題目的功能要求。
②通讀程序,看懂程序中演算法的實現方法。 ③細看程序,發現常見錯誤點。 14、書寫錯誤問題:
特別注意我們的注釋部分,注釋是以/*開始,以*/結尾,不能有多餘的,有也只能在/*和*/裡面。注意,比如「/***注釋部分*****/*/」是錯誤的!
二、編程時容易犯的錯誤
1.書寫標識符時,忽略了大小寫的區別
C語言認為大些字母和小寫字母時兩個不同的字元,如在編譯程序過程中,系統會把a和認為時兩個不同的變數名。習慣上,符號常量名用大寫表示,變數名用小寫表示,以增加程序的可能性。
2.忽略了變數的類型,進行了不合法的運算
3.忽略了「=」與「= =」的區別;C語言中,「=」是賦值運算符,「= =」是關系運算符
4.忘記加分號
考生應特別注意這種情況,分號是C語言中不可缺少的一部分,語句末尾必須有分號,但有時候千萬不能加;
5.輸入變數時忘記加地址運算符「&」,而在不應加「&」的位置加了地址運算符
(1)忘記加「&」的情況。
如int a,b; scanf(「%d%d」,a,b);
此時,無法正確給a和b讀入數據。scanf函數的作用是:按照a、b在內存中所分配的地址將a、b的值存進去。「&a」指a在內存中的地址,因此正確的書寫格式為scanf(「%d%d」,&a,&b);。
(2)多加「&」的情況。如int str[ ]; scanf(「%s」,&str);
C語言編譯程序對數組名的處理是:數組名代表數組的起始地址,scanf函數中的輸入項是字元數組名,因此不必再加地址符&,應該去掉。
6.輸入數據的方式余要求格式(通配符)不符。例如:scanf(「%d,%d」,&a,&b);
C規定:如果在「格式控制」字元串中,除了格式說明以外還有其他字元,則在輸入數據時應輸入與這些字元相同的字元。下面輸入是合法的:3,4

此時不用逗號而用空格或其他字元是不對的,如:3 4(中間為空格)3:4(中間為冒號);
三、相關概念
(1)素數:定義是除了能被1和自身整除外,不存在其他任何能整除該數的自然數。因此,在判斷一個數是否為素數時,只要有除了1和本身能整除它,還有一個數能整除它,就判定此數不是素數。
(2)判斷一個年份是否為閏年:如果年份能被4 整除但是不能被100整除,或者能被400整除,這兩種情況滿足之一都是閏年。
(3)利用選擇法進行從小到大的排序。選擇法的思路為:把第一個元素與其後面的元素比較,如果比後面的大,則交換,比較完所有的元素後,第一個位置的元素是最小的元素;在把第二個元素與其後面的元素進行比較,結果是除了第一個元素外,第二個元素是最小的元素;以此類推。
(4)數的按位分離演算法是:對10取模求個位上的數字,整除10後再對10取模求十位上的數字,整除100後再對10取模求百位上的數字。
(5)最大公約數的演算法是:(1)若n>m,則用n除以m求余數r;(2)若r=0,則m為最大公約數,若r≠0,則將r賦值於m,m賦值於n,繼續用n除以m求余數r;(3)直到r=0,m為最大公約數。根據演算法判斷每一條語句是否正確。 (6)求最小公倍數的演算法:等於兩個數的乘積除以它們的最大公約數。 (7)矩陣時以行為外循環,列為內循環,可以同時計算周邊元素的和。

㈨ C語言預處理編譯鏈接各個階段錯誤,分階段的說一下

預處理階段主要是處理宏指令,像什麼#include指令、#define指令還有條件編譯指令等。
編譯階段主要是檢查C語言程序的語法錯誤,即編寫的代碼是否符合C語言規則,編譯是以.c源文件為單位編譯成.obj文件(或者是.o文件)。
鏈接階段,就是把相關的.obj文件、所需的庫文件等組合成一個可執行的文件。如果缺少相關所需文件,就會鏈接報錯。
指針異常,數組下標越界這些錯誤屬於語義錯誤,這個只能在執行的時候才能發現問題,這些也叫運行時錯誤。

閱讀全文

與c程序編譯錯誤分為哪兩類相關的資料

熱點內容
台式機改為網路伺服器有什麼好處 瀏覽:960
騰訊雲輕量應用伺服器如何登陸 瀏覽:620
考研復試c語言編譯器 瀏覽:150
安卓的字體怎麼變粗 瀏覽:253
java錯誤無法載入主類 瀏覽:348
程序員考試考什麼文憑 瀏覽:883
pdf版破解 瀏覽:522
安卓系統如何重啟 瀏覽:174
小天才app鬧鍾怎麼改 瀏覽:962
司馬彥PDF 瀏覽:885
動力轉向編程 瀏覽:831
史瓦格期貨基本分析pdf 瀏覽:811
怎麼更改appid名字 瀏覽:235
抖音很解壓的東西 瀏覽:520
怎麼在app上進行機場升艙 瀏覽:133
fx3ga用什麼編程軟體 瀏覽:498
深度學習演算法樣本數量 瀏覽:966
電腦文件夾打開畫面塊狀 瀏覽:790
固態硬碟與機械盤的加密方法 瀏覽:634
unix編譯軟體 瀏覽:563