c常见错误中英文对照表
### C语言常见错误中英文对照解析 #### 一、致命错误(Fatal Errors) **1. 错误过多,停止编译 (fatal error C1003: error count exceeds number; stopping)** - **英文**: fatal error C1003: error count exceeds number; stopping - **中文**: 错误太多,停止编译 - **分析**: 当编译器检测到的错误数量超过了一定阈值时,为了防止进一步的资源浪费,编译器会停止编译过程。解决方法通常是修复已知错误并重新尝试编译。 **2. 文件未结束 (fatal error C1004: unexpected end of file found)** - **英文**: fatal error C1004: unexpected end of file found - **中文**: 文件未结束 - **分析**: 这种错误通常发生在代码中缺少必要的闭合符号如大括号 (`}`)、括号或者注释符 `/* ... */` 未正确关闭的情况下。检查这些符号是否配对,并确保所有的函数和结构定义都正确闭合。 **3. 无法打开头文件 (fatal error C1083: Cannot open include file: 'xxx': No such file or directory)** - **英文**: fatal error C1083: Cannot open include file: 'xxx': No such file or directory - **中文**: 无法打开头文件xxx:没有这个文件或路径 - **分析**: 编译器无法找到指定的头文件。可能的原因包括头文件不存在、路径错误或者文件名拼写错误。此外,如果头文件被设置为只读模式,也可能导致此问题。检查文件名和路径是否正确无误,并确认文件可访问。 **4. 无法从之前的错误中恢复,停止编译 (fatal error C1903: unable to recover from previous error(s); stopping compilation)** - **英文**: fatal error C1903: unable to recover from previous error(s); stopping compilation - **中文**: 无法从之前的错误中恢复,停止编译 - **分析**: 当编译过程中出现无法解决的错误时,编译器会停止继续编译。解决此类问题的关键是逐个排查并修正之前的错误。 #### 二、普通错误(Errors) **1. 常量中创建新行 (error C2001: newline in constant)** - **英文**: error C2001: newline in constant - **中文**: 常量中创建新行 - **分析**: 字符串常量不能跨行书写,即不能在字符串中直接换行。如果需要创建较长的字符串,可以使用字符串连接运算符 (`+`) 或者将字符串分段书写。 **2. #include 命令中需要文件名 (error C2006: #include expected a filename, found 'identifier')** - **英文**: error C2006: #include expected a filename, found 'identifier' - **中文**: #include 命令中需要文件名 - **分析**: 在使用 `#include` 预处理指令时,如果指定的是一个文件名,则必须使用双引号 (`"..."`) 或尖括号 (`<...>`),而不能直接使用标识符。正确的格式是 `#include "filename.h"` 或 `#include <filename.h>`。 **3. #define 语法错误 (error C2007: #define syntax)** - **英文**: error C2007: #define syntax - **中文**: #define 语法错误 - **分析**: 此错误通常出现在 `#define` 宏定义指令后面缺少宏名的情况下。例如,“#define”后面应该跟一个宏名和对应的替换文本。正确的格式应该是 `#define MACRO_NAME value`。 **4. 宏定义时出现了意外的 xxx (error C2008: 'xxx': unexpected in macro definition)** - **英文**: error C2008: 'xxx': unexpected in macro definition - **中文**: 宏定义时出现了意外的 xxx - **分析**: 在宏定义时,宏名与替换串之间应该有空格,例如 “#define TRUE 1”。避免在宏定义中出现不必要的字符或格式错误。 **5. 带参宏的形式参数重复使用 (error C2009: reuse of macro formal 'identifier')** - **英文**: error C2009: reuse of macro formal 'identifier' - **中文**: 带参宏的形式参数重复使用 - **分析**: 如果宏定义中有参数,则参数名称不能重复。例如,在 `#define func(a, a) a*a` 中,参数 `a` 重复了。正确的宏定义应为 `#define func(x, y) x*y`。 **6. 带参宏的参数表表现未知字符 (error C2010: 'character': unexpected in macro formal parameter list)** - **英文**: error C2010: 'character': unexpected in macro formal parameter list - **中文**: 带参宏的参数表表现未知字符 - **分析**: 如果在宏定义的参数列表中出现不应该有的字符,例如 `#define square(x|) x*x` 中的 `|`,则会导致此错误。确保参数列表中只包含合法的参数标识符。 **7. 预处理命令前面只允许空格 (error C2014: preprocessor command must start as first non whitespace)** - **英文**: error C2014: preprocessor command must start as first non whitespace - **中文**: 预处理命令前面只允许空格 - **分析**: 每一条预处理命令都应该独占一行,并且预处理命令(如 `#define`、`#include`)必须作为该行的第一个非空白字符出现。确保预处理指令之前没有任何其他字符,包括空格。 **8. 常量中包含多个字符 (error C2015: too many characters in constant)** - **英文**: error C2015: too many characters in constant - **中文**: 常量中包含多个字符 - **分析**: 字符型常量的单引号中只能有一个字符或者是以 `\` 开始的一个转义字符。例如,`'ab'` 是错误的,而 `'a'` 和 `'\n'` 是正确的。确保每个字符常量只包含一个字符。 **9. 转义字符非法 (error C2017: illegal escape sequence)** - **英文**: error C2017: illegal escape sequence - **中文**: 转义字符非法 - **分析**: 如果转义字符位于单引号 `' '` 或双引号 `" "` 之外,就会导致非法转义字符错误。例如,`char error='\n;';` 中的 `\n` 应位于单引号内。确保转义字符被正确使用。 **10. 未知的字符 0xhh (error C2018: unknown character '0xhh')** - **英文**: error C2018: unknown character '0xhh' - **中文**: 未知的字符 0xhh - **分析**: 通常是因为输入了中文标点符号或其他非 ASCII 字符。例如,在 `char error='E';` 中,如果分号 `;` 使用了中文标点,则会导致此错误。确保所有字符都是标准 ASCII 字符集中的字符。 **11. 期待预处理命令,但有无效字符 (error C2019: expected preprocessor directive, found 'character')** - **英文**: error C2019: expected preprocessor directive, found 'character' - **中文**: 期待预处理命令,但有无效字符 - **分析**: 预处理指令的第一字符必须是 `#`,如果后面紧跟其他非有效的字符,将会引发此错误。例如 `#!define TRUE 1` 中的 `!` 就是无效字符。确保预处理指令正确无误。 **12. 期待指数值,不能是字符 (error C2021: expected exponent value, not 'character')** - **英文**: error C2021: expected exponent value, not 'character' - **中文**: 期待指数值,不能是字符 - **分析**: 浮点数的指数表示形式错误。例如,`123.456E` 中的 `E` 后面应该跟着数字。正确的表示方式应该是 `123.456E2` 或 `123.456e2`。 **13. 标识符1不是标识符2的成员 (error C2039: 'identifier1': is not a member of 'identifier2')** - **英文**: error C2039: 'identifier1': is not a member of 'identifier2' - **中文**: 标识符1不是标识符2的成员 - **分析**: 当尝试访问结构体、联合或类的成员时,如果成员不存在于相应的类型中,就会出现此错误。例如,如果 `struct A { int x; };`,而在代码中使用 `A.y` 就会导致此错误。确保使用的成员确实存在于对应的类型中。 **14. default 语句多于一个 (error C2048: more than one default)** - **英文**: error C2048: more than one default - **中文**: default 语句多于一个 - **分析**: `switch` 语句中只能有一个 `default` 分支。如果有多个 `default` 分支,则会引发此错误。删除多余的 `default` 分支即可解决问题。 **15. switch 表达式不是整型的 (error C2050: switch expression not integral)** - **英文**: error C2050: switch expression not integral - **中文**: switch 表达式不是整型的 - **分析**: `switch` 语句的表达式必须是整型数据类型。如果表达式不是整型,例如是浮点型、字符型或者其他非整型数据类型,则会触发此错误。确保 `switch` 表达式符合整型数据类型的要求。 通过了解这些常见的 C 语言编译错误及其含义,可以帮助初学者更快地定位和解决问题,从而提高编程效率。