導航:首頁 > 源碼編譯 > 編譯程序經常有哪些錯誤

編譯程序經常有哪些錯誤

發布時間:2024-01-02 03:32:13

Ⅰ 為什麼我每次編譯C語言時,都會發生這樣的錯誤

這個可能是你編程用的軟體沒有裝好,一般是路徑安裝問題。你用的是不是vc++6.0?是的話,下面有些解決方法你可以試試。
關於vc++6.0軟體編程時出現「Error spawning cl.exe」「 cannot open file "Debug/sad.exe"(其中sad是文件名)」和「計算機丟失mspdb60.ll」等類似問題時;
主要可能存在以下問題1.以前安裝過vc++6.0,但是卸載不徹底,或者重裝系統後,原來安裝軟體不能正常使用。解決方法:卸載原軟體。
2,vc++6.0與windowxpsp3兼容,在window7下計算機會提示軟體不兼容,這時不用修改成兼容模式,否者就不能使用了,直接安裝就可以了,不用考慮兼容性問題,
還用如果是從網上下載的軟體,安裝時的注冊碼一般輸入111-111111就行。另外,下載的破解版軟體可能被殺毒軟體截獲,安裝前最好先關閉殺毒軟體,然後按提示進行安裝。
3.在排除前兩個問題的前提下,出現上述問題時,很可能的問題是軟體中的設置出現錯誤。可以按下述方法進行調試即可:
打開vc界面 點擊VC「TOOLS(工具)」—>「Option(選擇)」 —>「Directories(目錄)」重新設置「Excutable Fils、Include Files、 Library Files、Source Files」
的路徑。很多情況可能就一個盤符的不同 (例如你的VC裝在C,但是這些路徑全部在D),改過來就OK了如果你裝在其他盤里,則仿照其路徑變通就行(我就是裝在D盤)。
關鍵是microsoft visual studio\ 後面的東西要相同。 如果你是按照初始路徑安裝vc6.0的,路徑應為:
executatble files:
C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin
C:\Program Files\Microsoft Visual Studio\VC98\BIN
C:\Program Files\Microsoft Visual Studio\Common\TOOLS
C:\Program Files\Microsoft Visual Studio\Common\TOOLS\WINNT

include files:
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE
C:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE
C:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDE

library files:
C:\Program Files\Microsoft Visual Studio\VC98\LIB
C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB

source files:
C:\Program Files\Microsoft Visual Studio\VC98\MFC\SRC
C:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE
C:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDE
C:\Program Files\Microsoft Visual Studio\VC98\CRT\SRC
更改完成後,關閉軟體,重新打開,再進行編程。
4,如果按第三步操作後,編程時仍然提示錯誤,就在建立工程時,將存儲路徑改為你自己建立的文件夾(隨便在那個盤建一個都行,只要自己能找到就行),
以避免編譯時文件不能打開的問題。
5,經過以上四步調試,一般情況下就可以使用了,如果還不能使用的話,可以嘗試一下三種方法。
一,卸掉現有版本,更換版本重新安裝,然後再按以上步驟進行調試。
二,直接將別人計算機中安裝好的軟體從安裝盤中復制的自己的電腦上,(這樣做有時也要按第三步和第四步進行調整,),找出文件中的圖標即可運行。
三,最後一個辦法,重裝系統,系統重裝後,一定要先裝vc++再裝補丁,不然的話還可能錯誤。

Ⅱ 人民郵電出版社出版的c語言程序設計中的錯誤有哪些

1. 書寫標識符時,忽略了大小寫字母的區別。
int main( void )
{
int a = 5;
printf( "%d", A );

return 0;
}
編譯器認為 a 和 A 是兩個不同的變數名,而顯示出錯信息。C 語言規定大寫字母和小寫字母是不同的字元;而有些編程語言是不分大小寫的。習慣上,符號常量名用大寫,變數名用小寫表示,以增加可讀性。

2. 忽略了變數的類型,進行了不合法的運算。
int main( void )
{
float a, b;
printf( "%d", a % b );

return 0;
}
% 是求余運算符,a % b 的結果是 a 除以 b 的余數。只有 % 左右兩邊的操作數都是整型時,才可以進行求余運算。故而上面的程序是錯誤的,因為 a 和 b 是浮點型變數。

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

4. 忽略了「=」與「==」的區別。
許多高級語言都使用「=」符號作為關系運算符的「等於」。如 BASIC 程序中可以寫:
if ( a = 3 ) then …
但 C 語言中,「=」是賦值運算符,「==」才是關系運算符。如:
if (a == 3)
a = b;
a == 3 是比較 a 是否等於 3;而 a = b; 表示把 b 的值賦給 a。初學者往往會把 a == 3 錯寫成 a = 3,這樣寫是符合語法的,但是不符合我們的期望。如果錯寫成了 a = 3,有些編譯器會給出警告。

5. 忘記加分號。
分號是 C 語句中不可缺少的一部分,語句末尾必須有分號。
a = 1
b = 2;
編譯時,編譯器發現「a = 1」後面沒有分號,就會報錯。改錯時,如果在編譯器所說的有錯的一行中未發現錯誤,就需要看一下上一行是否漏掉了分號。

6. 多加分號。
{
z = x + y;
t = z / 100;
printf( "%f", t );
};
上面代碼中,大括弧 } 後面的分號(;)是毫無必要的!因為單獨一個 ; 也是合法的 C 語言語句,所以 } 後面寫了 ; 也是合法的,但是毫無必要!又如:
if ( a % 3 == 0 );
i++;
程序員的本意是如果 3 整除 a,則 i 加 1。但由於 if ( a % 3 == 0 ) 後加了分號,則 if 語句到此結束。不論 3 是否整除 a,程序都會執行 i++; 語句。再如:
for ( i = 0; i < 5; i++ ) ;
{
scanf( "%d", &x );
printf( "%d", x );
}
程序員的本意是先後輸入 5 個數,每輸入一個數後再將它輸出。但由於for () 後加了一個分號,循環體變為空語句 ; 。空語句 ; 執行 5 次後,下面的程序塊才開始執行,導致的結果是只能輸入一個數並輸出它。

7. 使用 scanf 函數時忘記加取址運算符「&」。
int a, b;
scanf( "%d %d", a, b );
這樣寫是錯誤的!應該改成 scanf( "%d %d", &a, &b );

8. 輸入數據的方式與要求不符。
scanf( "%d %d", &a, &b );
輸入時,不能用逗號作兩個數據間的分隔符。例如:3, 4 。而要使用空格、回車或者 tab 鍵作為分隔符。例如:3 4 。如果我們想用逗號(,)來做分隔符,可以這樣寫:
scanf( "%d,%d", &a, &b );
此時不用逗號而用空格或其它字元是不對的。例如:3:4 。又如:
scanf("a=%d,b=%d",&a,&b);
輸入應如以下形式:
a=3,b=4

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

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

11. 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 語句,當 grade 值為 A 時,printf 函數在執行完第一個語句後會接著執行第二、三、四、五個 printf 函數語句。正確寫法應在每個分支後再加上「break;」。例如:
case 'A':
printf( "85~100\n" );
break;

12. 忽視了 while 和 do-while 語句在細節上的區別。
(1) int main( void )
{
int a = 0, i;

scanf( "%d", &i );
while ( i <= 10 ) {
a += i;
++i;
}
printf( "%d", a );

return 0;
}

(2) int main( void )
{
int a = 0, i;

scanf( "%d", &i );
do {
a += i;
++i;
} while ( i <= 10 );
printf( "%d", a );

return 0;
}
可以看到,當輸入 i 的值小於或等於 10 時,二者得到的結果相同。而當 i>10 時,二者結果就不同了。因為 while
循環是先判斷後執行,而 do-while 循環是先執行後判斷。對於大於 10 的數 while 循環的循環體一次也不執行,而 do-while
語句則要執行一次。

13. 定義數組時誤用變數。
int n = 6;
int a[n];
C99 以前,數組名後用方括弧括起來必須是常量,包括常量表達式。但是在最新的 C99 標准中,上面的代碼是正確無誤的。如果您的編譯器不支持 C99 ,那麼上面的代碼不能通過編譯。

14. 在定義數組時,將定義的「元素個數」誤認為是可使的最大下標值。
int main( void )
{
int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

printf( "%d", a[10] );

return 0;
}
C 語言規定:定義時如果用 a[10],則表示數組 a 有 10 個元素,其下標值范圍為0到9。a[10]不屬於上面定義的數組中。對 a[10] 進行賦值可能導致程序崩潰!

15. 在不應加地址運算符 & 的位置加了地址運算符。
char s[100];
scanf( "%99s", &s );
C 語言中,數組名代表該數組的起始地址。因此上面的代碼中,s 本身就已經是一個地址了,我們不需要再對它進行取址運算。正確的寫法應該是:scanf( "%99s", s );

Ⅲ C語言編程時 都有什麼樣的錯誤提示

Ambiguous operators need parentheses
不明確的運算,需要用括弧括起來

Ambiguous symbol 'xxx'
不明確的符號

Argument list syntax error
參數表語法錯誤

Array bounds missing
丟失數組界限符

Array size too large
數組尺寸太大

Bad character in parameters
參數中有不適當的字元

Bad file name format in include directive
包含命令中文件名格式不正確

Bad ifdef directive syntax
編譯預處理ifdef有語法錯誤

Bad ifndef directive syntax
編譯預處理ifndef有語法錯誤

Bad undef directive syntax
編譯預處理undef有語法錯誤

Call of non-function
調用未定義的函數

Call to function with no prototype
調用函數時沒有函數的說明

Cannot modify a const object
不允許修改常量對象

Case outside of switch
Case 出現在 switch 之外

Case statement missing
漏掉了 Case 語句

Case syntax error
Case 語法錯誤

Case outside of switch
Case 出現在 switch 之外

Case statement missing
漏掉了 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 )
函數調用缺少右括弧

Function definition out of place
函數定義位置錯誤

Function 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 pointer
指針使用非法

Improper use of a typedef symbol
類型符號定義使用不恰當

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
無法執行的表達式運算

Lvalur 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
賦值可能不正確

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
結構體的尺寸太大

Subscripting missing ]
下標缺少右方括弧

Superfluous &with function or array
函數或數組中有多餘的"&"

Suspicious pointer conversion
可疑的指針轉換

Symbol limit exceeded
符號超限

Too few parameters in call
函數調用時的實參少於函數的參數

Too many error or warning messages
錯誤或警告信息太多

Too much auto memory in function
函數中用到的局部存儲太多

Too much global data defined in file
文件中全局數據太多

Too 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

Bit field too large
位欄位太長

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 assembler 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 off 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
結構體的長度為零

閱讀全文

與編譯程序經常有哪些錯誤相關的資料

熱點內容
文件壓縮包如何加密文件 瀏覽:183
2010提出的演算法 瀏覽:672
冰櫃壓縮機的壽命 瀏覽:105
辦公室采訪程序員 瀏覽:569
美橙雲伺服器購買 瀏覽:754
漢語詞典pdf下載 瀏覽:353
android公網ip 瀏覽:613
要塞1地圖放哪個文件夾 瀏覽:850
凡科建站怎麼弄伺服器 瀏覽:939
蘋果手機怎麼設置app播放 瀏覽:202
下載網站源碼用什麼瀏覽器 瀏覽:241
六線譜pdf 瀏覽:156
linuxmysqlsock 瀏覽:239
人教版數學pdf下載 瀏覽:460
文檔安全加密系統 瀏覽:492
數控銑床編程簡單數字 瀏覽:788
編程電纜如何重啟 瀏覽:121
myqq命令行發消息 瀏覽:365
日產逍客怎麼使用app升窗 瀏覽:503
安卓系統怎麼快速刪除微信內容 瀏覽:653