C语言教程-详解 C语言中的编程错误

错误是程序中出现的问题或故障,使程序的行为异常,即使经验丰富的开发人员也可能出现这些错误。编程错误也被称为错误或故障,消除这些错误的过程被称为调试。
这些错误在编译或执行时被检测到。因此,必须从程序中删除错误以成功执行程序。
C语言中主要存在五种类型的错误:
- 语法错误
- 运行时错误
- 链接器错误
- 逻辑错误
- 语义错误
语法错误
语法错误也被称为编译错误,因为它们发生在编译时,或者我们可以说语法错误是编译器抛出的错误。这些错误主要是由于输入错误或不遵循指定编程语言的语法而引起的。这些错误通常只有初学者会犯,因为他们对该语言还不熟悉。这些错误可以很容易地进行调试或更正。
例如:
If we want to declare the variable of type integer,
int a; // this is the correct form
Int a; // this is an incorrect form.
#include <stdio.h>
int main()
{
a = 10;
printf("The value of a is : %d", a);
return 0;
}
输出
在上面的输出中,我们观察到代码抛出了'a'未声明的错误。这个错误只是语法错误。
还有另一种可能性,即语法错误可能存在的情况,即如果我们在基本结构中犯错误。让我们通过一个例子来理解这种情况。
#include <stdio.h>
int main()
{
int a=2;
if(.) // syntax error
printf("a is greater than 1");
return 0;
}
在上面的代码中,我们在“if”中放置了(.)而不是条件,因此会生成语法错误,如下图所示。
输出
运行时错误
有时即使在成功编译后,错误也可能在执行时发生,这被称为运行时错误。当程序运行时无法执行操作时,会产生运行时错误。除以零是运行时错误的常见示例。这些错误很难找到,因为编译器不会指出这些错误。
通过一个例子来理解。
#include <stdio.h>
int main()
{
int a=2;
int b=2/0;
printf("The value of b is : %d", b);
return 0;
}
输出
在上面的输出中,我们观察到代码显示运行时错误,即除以零。
链接器错误
链接器错误主要是在未创建程序的可执行文件时生成的。这可能是由于函数原型错误或使用错误的头文件引起的。例如,main.c文件包含了sub()函数,而该函数的声明和定义是在其他文件(例如func.c)中完成的。在编译过程中,编译器在func.c文件中找到sub()函数,因此生成了两个目标文件,即main.o和func.o。在执行时,如果在func.o文件中找不到sub()函数的定义,则会抛出链接器错误。最常见的链接器错误是使用Main()而不是main()。
通过一个简单的例子来理解。
#include <stdio.h>
int Main()
{
int a=78;
printf("The value of a is : %d", a);
return 0;
}
输出
在上面的输出中,我们观察到代码显示链接器错误,即找不到main()函数。
逻辑错误 逻辑错误是导致不正确输出的错误。这些错误产生了错误的输出,但它们本身是无错误的,被称为逻辑错误。这些错误主要由初学者犯下。这些错误的发生主要取决于开发人员的逻辑思维。如果程序员的逻辑思维良好,那么发生这些错误的机会就较小。
通过一个例子来理解。
#include <stdio.h>
int main()
{
int sum=0; // 变量初始化
int k=1;
for(int i=1;i<=10;i++); // 逻辑错误,因为我们在循环后面放了一个分号
{
sum=sum+k;
k++;
}
printf("The value of sum is %d", sum);
return 0;
}
输出
在上面的代码中,我们试图打印出10个数字的和,但是由于在for循环后面放了一个分号(;),所以for循环的内部语句不会执行。这导致了错误的输出。
语义错误 语义错误是当语句对编译器而言不可理解时发生的错误。
以下是语义错误的情况:
使用未初始化的变量。
int i;
i=i+2;
类型不兼容
int b = "javatiku";
表达式错误
int a, b, c;
a+b = c;
数组越界
int a[10];
a[10] = 34;
通过一个例子来理解。
#include <stdio.h>
int main()
{
int a, b, c;
a = 2;
b = 3;
c = 1;
a + b = c; // 语义错误
return 0;
}
在上面的代码中,我们使用了a+b = c
这个语句,这是错误的,因为我们不能在左边使用两个操作数。
输出