C 语言编程错误

17 Mar 2025 | 4 分钟阅读

错误是在程序中发生的导致程序行为异常的问题或缺陷,即使是经验丰富的开发人员也可能犯这些错误。编程错误也称为 bug 或故障,而清除这些 bug 的过程称为调试

这些错误在编译或执行时都会被检测到。因此,为了成功执行程序,必须从程序中清除这些错误。

C 语言编程中主要存在五种类型的错误:

  • 语法错误
  • 运行时错误
  • 链接器错误
  • 逻辑错误
  • 语义错误
Programming Errors in C

语法错误

语法错误也称为编译错误,因为它们发生在编译时,或者我们可以说语法错误是由编译器抛出的。这些错误主要是由于在输入时出错或不遵循指定编程语言的语法而引起的。这些错误通常只有初学者才会犯,因为他们对语言还不熟悉。这些错误可以很容易地进行调试或纠正。

例如

常见的语法错误包括:

  • 在编写代码时遗漏了括号(})。
  • 在声明变量之前显示其值。
  • 在语句末尾遗漏了分号(;)。

让我们通过一个例子来理解。

输出

Programming Errors in C

在上面的输出中,我们观察到代码抛出了“a”未声明的错误。这个错误就是语法错误。

语法错误还可能存在于另一种情况,即我们在基本结构中犯了错误。让我们通过一个例子来理解这种情况。

在上面的代码中,我们在“if”语句的条件处使用了“.”而不是实际的条件,因此会生成如下截图所示的语法错误。

输出

Programming Errors in C

运行时错误

有时,即使成功编译后,在执行时也会出现错误,称为运行时错误。当程序运行时,无法执行操作是运行时错误的主要原因。除以零是运行时错误的常见示例。这些错误非常难以查找,因为编译器不会指向这些错误。

让我们通过一个例子来理解。

输出

Programming Errors in C

在上面的输出中,我们观察到代码显示了运行时错误,即除以零。

链接器错误

链接器错误主要在程序的可执行文件未创建时生成。这可能是由于函数原型错误或头文件使用错误造成的。例如,main.c 文件包含 sub() 函数,该函数的声明和定义在其他文件(如 func.c)中完成。在编译期间,编译器会在 func.c 文件中找到 sub() 函数,因此会生成两个对象文件,即 main.ofunc.o。在执行时,如果在 func.o 文件中找不到 sub() 函数的定义,则会抛出链接器错误。最常见的链接器错误是使用 Main() 而不是 main()

让我们通过一个简单的例子来理解。

输出

Programming Errors in C

逻辑错误

逻辑错误是指导致非预期输出的错误。这些错误会产生不正确的输出,但它们本身没有错误,因此称为逻辑错误。这类错误主要是初学者犯的。这些错误的发生主要取决于开发人员的逻辑思维。如果程序员的逻辑思维能力强,那么发生这些错误的几率就会很小。

让我们通过一个例子来理解。

输出

Programming Errors in C

在上面的代码中,我们试图打印 10 个数字的总和,但我们得到了错误的输出,因为我们在 for 循环后放了一个分号(;),因此 for 循环的内部语句将不会执行。这导致了错误的输出。

语义错误

语义错误是指编译器无法理解的语句发生的错误。

以下情况可能导致语义错误:

  • 使用未初始化的变量。
    int i;
    i=i+2;
  • 类型不兼容
    int b = "javatpoint";
  • 表达式中的错误
    int a, b, c;
    a+b = c;
  • 数组索引越界
    int a[10];
    a[10] = 34;

让我们通过一个例子来理解。

在上面的代码中,我们使用了a+b =c语句,这是不正确的,因为我们不能在左侧使用两个操作数。

输出

Programming Errors in C