說明:Turbo C源程序錯誤分為三種:致命錯誤、壹般錯誤和警告。其中,致命錯誤通常是內部編譯錯誤;壹般錯誤是指程序的語法錯誤、磁盤或內存訪問錯誤或命令行錯誤。警告只是指出壹些可疑的情況,並不阻止編譯。
以下按字母順序A ~ Z列出致命錯誤和壹般錯誤信息,英漢對比及處理方法:
(壹)、中英文致命錯誤的控制和處理方法:
A-b致命錯誤
內嵌函數調用錯誤(非法內部函數調用)
分析與處理:使用宏定義的內部函數時,無法正確調用。內部函數以兩個下劃線(_ _)開始和結束。
不可約表達式樹(不可約表達式樹)
分析處理:這種錯誤是指文件行中的表達式過於復雜,代碼生成器無法為其生成代碼。必須避免這種表達。
寄存器分配失敗(內存分配失敗)
分析處理:這種錯誤是指文件行中的表達式過於復雜,代碼生成器無法為其生成代碼。這時候就要把這個復雜的表達式簡化或者幹脆避免使用。
(2)壹般錯誤信息及其處理方法的英漢圖片
# operator後面沒有maco參數名(# operator後面沒有宏參數名)
分析處理:在宏定義中,#用來標識壹個宏變量字符串。#符號後面必須跟有宏參數名。
“Xxxxxx”不是參數(“xxxxxx”不是函數參數)
分析處理:標識符在源程序中被定義為函數參數,但並不出現在函數中。
模糊符號“xxxxxx”(模糊符號“xxxxxx”)
分析處理:兩個或兩個以上結構的域名相同,但偏移量和類型不同。當在沒有結構名稱的變量或表達式中引用該域時,它將是不明確的。此時,需要修改域名或在引用中添加結構名。
參數#缺少名稱(缺少參數#名稱)
分析處理:參數名已經脫離了用來定義函數的函數原型。如果壹個函數是用原型定義的,它必須包含所有的參數名。
參數列表語法錯誤(參數表中的語法錯誤)
分析處理:函數調用的參數必須用逗號分隔,以右括號結束。如果源文件包含後面沒有逗號或右括號的參數,則會發生錯誤。
缺少數組界限(缺少數組分隔符“]”)
分析和處理:在源文件中定義了壹個數組,但它不以下面的右括號結束。
數組太大(數組太大)
分析處理:定義的數組太大,超過了可用的內存空間。
匯編語句太長(匯編語句太長)
分析和處理:內部匯編語句的最大長度不能超過480字節。
錯誤的配置文件(不正確的配置文件)
TURBOC的配置文件。CFG包含不適合命令行選項的非註釋文本。配置文件命令選項必須以破折號開頭。
include指令中的文件名格式錯誤(include指令中的文件名格式不正確)
分析和處理:包含文件名必須用引號(“filename.h”)或尖括號(
錯誤的ifdef指令語法(ifdef指令的ifdef語法錯誤)
分析和處理:#ifdef必須以單個標識符(只有這壹個)作為指令體。
錯誤的ifndef指令語法(ifndef指令的語法錯誤)
分析和處理:#ifndef必須以單個標識符(只有這壹個)作為指令體。
錯誤的未定義指令語法(未定義指令的語法錯誤)
分析和處理:#undef指令必須以單個標識符(只有這壹個)作為指令體。
錯誤的文件大小語法(位字段長度的語法錯誤)
分析處理:位字段的長度必須是1—16位的常數表達式。
調用非函數(調用未定義函數)
分析與處理:被調用的函數未定義,通常是由於函數聲明不正確或函數名拼寫錯誤造成的。
不能修改const對象(不能修改long對象)
分析與處理:對定義為常量的對象進行非法操作(如常量賦值)導致此錯誤。
開關外部的外殼(外殼出現在開關外部)
分析處理:編譯器發現Case語句出現在switch語句之外,這種故障通常是因為括號不匹配造成的。
缺少Case語句(缺少Case語句)
分析和處理:Case語言必須包含壹個以冒號結尾的常量表達式。如果省略冒號或在冒號前添加其他符號,就會出現這種錯誤。
字符常量太長(字符常量太長)
分析處理:字符常量的長度通常只有壹兩個字符長,超過這個長度就會出現這個錯誤。
缺少復合語句(缺少復合語句)
分析與處理:編譯器掃描源文件時,找不到結束符號(大括號)。這種故障通常是由於支架不匹配造成的。
沖突的類型修飾符(類型修飾符沖突)
分析和處理:同壹個指針只能指定壹個索引修飾符(比如near或far);對於同壹個函數,只能給出壹個語言修飾符(如Cdecl、pascal或interrupt)。
需要常量表達式(需要常量表達式)
分析和處理:數組的大小必須是常數。此錯誤通常是由#define常量的拼寫錯誤引起的。
找不到文件“xxxxxx.xxx”(找不到文件“xxxxxx.xx”)
分析和處理:編譯器找不到命令行上給定的文件。
缺少聲明(省略解釋)
分析處理:當源文件包含struct或union域聲明,並且後面的分號被省略時,就會出現這種錯誤。
聲明需要類型或存儲類(表示必須給定類型或存儲類)
分析處理:正確的變量描述壹定要註明變量類型,否則會出現這種錯誤。
聲明語法錯誤(表示語法錯誤)
分析處理:在源文件中,如果壹個描述丟失了壹些符號或者輸入了多余的符號,就會出現這種錯誤。
switch之外的Default(Default語句出現在switch語句之外)
分析處理:這種錯誤通常是由於括號不匹配造成的。
定義指令需要壹個標識符(定義指令必須有壹個標識符)
分析處理:#define後面的第壹個非空格字符壹定是標識符,如果這個位置出現了其他字符,就會造成這種錯誤。
除以零(除以零)
分析處理:當源文件的常數表達式的除數為零時,就會產生這種錯誤。
Do語句必須有While(do While關鍵字必須在do語句中)
分析和處理:如果源文件包含沒有While關鍵字的do語句,則會出現此錯誤。
do while語句中缺少符號“(”)。
分析處理:在do語句中,如果while關鍵字後面沒有左括號,就會出現這個錯誤。
缺少Do while語句;(Do while語句中的分號被刪除)
分析處理:在DO語句的條件表達式中,如果右括號後沒有分號,就會出現這種錯誤。
重復案例(案例情況不是唯壹的)
分析和處理:Switch語句的每種情況都必須有壹個唯壹的常量表達式值。否則會出現這種錯誤。
枚舉語法錯誤(枚舉語法錯誤)
分析處理:如果enum描述的標識符表格式不正確,就會出現這種錯誤。
枚舉常數語法錯誤(枚舉常數的語法錯誤)
分析處理:如果賦給enum類型變量的表達式值不是常量,就會出現這種錯誤。
錯誤指令:xxxx(錯誤指令:xxxx)
分析處理:當源文件處理#error指令時,會顯示該指令所指示的信息。
寫入輸出文件時出錯(寫入輸出文件時出錯)
分析處理:這種錯誤通常是由於磁盤空間已滿,無法寫入造成的。
表達式語法錯誤(表達式語法錯誤)
分析和處理:這種錯誤通常是由於出現了兩個連續的運算符、括號不匹配或缺失、以及前面的語句中省略了分號。
調用中的額外參數(調用時出現額外參數)
分析處理:此錯誤是由於調用函數時,實際參數個數多於函數定義中的參數個數造成的。
對xxxxxx的調用中有額外的參數(額外的參數在調用xxxxxxxx函數時出現)
文件名太長(文件名太長)
分析和處理:#include指令給出的文件名太長,編譯器無法處理,會出現這種錯誤。通常,DOS下的文件名長度不能超過64個字符。
For語句缺失)(For語言名稱缺失")")
分析處理:在for語句中,如果控制表達式後缺少右括號,就會出現這種錯誤。
For語句缺失((For語句缺失)(")。
For語句缺失;(缺少For語句“;”)
分析和處理:在for語句中,當表達式後面缺少分號時,就會出現這種錯誤。
函數調用丟失)(函數調用丟失")")
分析與處理:函數調用的參數表中,右括號缺失或括號不匹配,就會出現這種錯誤。
函數定義位置不當(函數定義位置錯誤)
函數不接受數量可變的參數(函數不接受數量可變的參數)。
Goto語句缺少標簽(Goto語句缺少標簽)
If語句缺失((If語句缺失)(")
If語句缺失)(If語句缺失")")
非法初始化(非法初始化)
非法八進制數字(非法八進制數)
分析處理:這種錯誤通常是八進制常數中含有非八進制數造成的。
非法指針減法(非法指針減法)
非法結構操作(非法結構操作)
非法使用浮點(非法浮點運算)
非法使用指針(非法使用指針)
typedef符號的不當使用(typedef符號的不當使用)
不兼容的存儲類(不兼容的存儲類型)
不兼容的類型轉換(不兼容的類型轉換)
不正確的命令行參數:xxxxxxxx(不正確的命令行參數:xxxxxxxx)
不正確的命令文件參數:xxxxxxxx(不正確的配置文件參數:xxxxxxxx)
數字格式不正確(數據格式不正確)
默認值的不正確使用
初始值設定項語法錯誤(初始化語法錯誤)
無效的ind校正(無效的indrection操作)
無效的宏參數分隔符(無效的宏參數分隔符)
無效的指針添加(無效的指針添加)
點的無效使用
宏參數語法錯誤(宏參數語法錯誤)
宏展開太長(宏展開太長)
定義中的參數數量不匹配。
錯位中斷(在錯誤的位置中斷)
錯位繼續(錯位)
小數點放錯位置(小數點在錯誤的位置)
錯位的else (else在錯誤的位置)
錯位的else驅動(CLSE指令位於錯誤的位置)
endif指令放錯了位置(endif指令位於錯誤的位置)
必須可尋址(必須可尋址)
必須獲取內存位置的地址(必須是內存地址)
沒有文件名結尾(沒有文件終止符)
未給出文件名(未給出文件名)
不可移植指針賦值(給不可移植指針賦值)
不可移植指針比較(不可移植指針比較)
不可移植的返回類型轉換。
不是允許的類型(不允許的類型)
內存不足(內存不足)
的左側需要指針(運算符的左側必須有指針)
“XXXXXX”的重新聲明(“XXXXXX”被重新定義)
結構或數組的大小未知(結構或數組大小不確定)
缺少語句;(該語句缺少“;”)
結構或聯合語法錯誤
結構尺寸太大(結構太大)
缺少訂閱](下標缺少“]”)
缺少Switch語句((缺少switch語句)(")
缺少Switch語句)(缺少switch語句")")
調用中參數太少(函數調用中參數太少)
對“xxxxxx”的調用中參數太少(調用“xxxxxx”時參數太少)
太多案例(太多案例)
小數點太多(小數點太多)
過多的違約案例(過多的違約)
指數太多(訂單代碼太多)
太多的初始化器(太多的初始化器)
聲明中的存儲類過多(描述中的存儲類過多)
decleration中的類型太多(描述中的類型太多)
功能中的自動記憶過多。
文件中定義了過多的全局數據(文件中定義了過多的全局數據)
兩個保守點(兩個連續點)
參數#中的類型不匹配(參數“#”類型不匹配)
對“xxxxxxxx”的調用中參數#的類型不匹配(調用“xxxxxxxx”時參數#類型不匹配)
參數' xxxxxxxx '中的類型不匹配(參數' xxxxxxxx '的類型不匹配)
在對“yyyyy”的調用中,參數“yyyyy”的類型不匹配(調用“yyyyy”時,參數“XXXXXXXX”的數字類型不匹配)。
“XXX”的重新定義中的類型不匹配
無法創建輸出文件“XXXXXXXX”。XXX '(無法創建輸出文件' xxxxxxxx.xxx ')。
無法創建turboc.lnk(無法創建turboc.lnk)。
無法執行命令' xxxxxxxx '(無法執行' xxxxxxxx '命令)
無法打開包含文件' xxxxxxxx.xxx '(無法打開包含文件' xxxxxxxx.xxx ')
無法打開輸入文件“xxxxxxxx.xxx”(無法打開輸入文件“xxxxxxxx.xxx”)。
未定義的標簽“xxxxxxx”(標簽“xxxxxxxx”未定義)
未定義的結構“xxxxxxxxx”(結構“xxxxxxxx”未定義)
未定義的符號“xxxxxxx”(符號“xxxxxxxx”未定義)
始於第#行的註釋中出現意外的文件結尾(源文件在註釋中意外結束)
文件在第#行的條件語句中意外結束(源文件在第#行開始的條件語句中意外結束)
未知的預處理器指令“XXX”(未知的預處理指令:“XXX”)未終止的字符常量(未終止的字符常量)
未終止的字符串(未終止的字符串)
未終止的字符串或字符常量。
用戶中斷(用戶中斷)
所需值(分配請求)
While語句缺失((While語句缺失' ('))
While語句缺失)(While語句缺失')')
' xxxxxxxx '中的參數數目錯誤(調用' xxxxxxxx '時參數數目錯誤)