📅  最后修改于: 2020-10-22 00:48:36             🧑  作者: Mango
错误是程序中出现的问题或错误,它们会使程序的行为异常,有经验的开发人员也可以使这些错误发生。编程错误也称为错误或错误,而消除这些错误的过程称为调试。
在编译或执行期间会检测到这些错误。因此,必须从程序中删除错误才能成功执行程序。
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
int main()
{
a = 10;
printf("The value of a is : %d", a);
return 0;
}
输出量
在上面的输出中,我们观察到代码抛出未声明’a’的错误。该错误只不过是语法错误。
可能存在语法错误的另一种可能性,即如果我们在基本构造中犯了错误。让我们通过一个例子来了解这种情况。
#include
int main()
{
int a=2;
if(.) // syntax error
printf("a is greater than 1");
return 0;
}
在上面的代码中,我们将(。)而不是条件放在’if’中,因此这会产生语法错误,如下面的屏幕快照所示。
输出量
有时,即使在成功编译之后,这些错误仍在执行期间存在,称为运行时错误。当程序正在运行时,它无法执行操作是导致运行时错误的主要原因。除以零是运行时错误的常见示例。这些错误很难找到,因为编译器没有指出这些错误。
让我们通过一个例子来理解。
#include
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
int Main()
{
int a=78;
printf("The value of a is : %d", a);
return 0;
}
输出量
逻辑错误是导致不良输出的错误。这些错误产生错误的输出,但是它们是无错误的,称为逻辑错误。这些类型的错误主要是由初学者完成的。这些错误的发生主要取决于开发人员的逻辑思维。如果程序员听起来逻辑上不错,那么出现这些错误的机会就会更少。
让我们通过一个例子来理解。
#include
int main()
{
int sum=0; // variable initialization
int k=1;
for(int i=1;i<=10;i++); // logical error, as we put the semicolon after loop
{
sum=sum+k;
k++;
}
printf("The value of sum is %d", sum);
return 0;
}
输出量
在上面的代码中,我们尝试print10位数字的总和,但是由于将分号(;)放在for循环之后而导致输出错误,因此不会执行for循环的内部语句。这会产生错误的输出。
语义错误是当编译器无法理解语句时发生的错误。
以下是语义错误的情况:
让我们通过一个例子来理解。
#include
int main()
{
int a,b,c;
a=2;
b=3;
c=1;
a+b=c; // semantic error
return 0;
}
在上面的代码中,我们使用语句a + b = c,这是不正确的,因为我们不能使用左侧的两个操作数。
输出量