C语言编程错误
错误是程序中出现的问题或错误,它们会使程序的行为异常,并且经验丰富的开发人员也可以犯这些错误。编程错误也称为bug或错误,而消除这些bug的过程称为 debugging 。
这些错误是在编译或执行期间检测到的。因此,必须从程序中删除错误才能成功执行程序。
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;
}
输出
逻辑错误
逻辑错误是导致不良输出的错误。这些错误产生错误的输出,但是它们是无错误的,称为逻辑错误。这些类型的错误主要是由初学者完成的。这些错误的发生主要取决于开发人员的逻辑思维。如果程序员听起来逻辑上不错,那么出现这些错误的机会就会更少。
让我们通过一个例子来理解。
#include <stdio.h>
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;
}
输出
在上面的代码中,我们尝试打印10位数字的总和,但是由于将分号(;)放在for循环之后而导致输出错误,因此不会执行for循环的内部语句。这会产生错误的输出。
语义错误
语义错误是当编译器无法理解语句时发生的错误。
以下可能是语义错误的情况:
使用未初始化的变量。
int i;
i = i + 2;
类型兼容性
int b ="lidihuo";
表达式错误
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; // semantic error
return 0;
}
在上面的代码中,我们使用语句 a + b = c ,这是不正确的,因为我们不能使用左侧的两个操作数。
输出