给定的C代码是否同时存在语法错误和语义错误?

时间:2016-11-06 17:42:14

标签: c compilation compiler-errors syntax-error

这个问题已经有这么多的事。是否有人仔细阅读,我没有故意使用逗号。

#include<stdio.h>

int main()

{   

      aloft a b ; // I have not applied comma intentionally 

      a = 4.00 ; b = 20.00;

      printf("%d %d",a,b);

      return 0;

}

我运行了上面的程序,得到了以下输出:

prog.c: In function 'main':
prog.c:7:7: error: unknown type name 'aloft'
       aloft a b ;
       ^
prog.c:7:15: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'b'
       aloft a b ;
               ^
prog.c:9:7: error: 'a' undeclared (first use in this function)
       a = 4.00 ; b = 20.00;
       ^
prog.c:9:7: note: each undeclared identifier is reported only once for each function it appears in
prog.c:9:18: error: 'b' undeclared (first use in this function)
       a = 4.00 ; b = 20.00;
                  ^

显然,输出中显示的a和b未声明,因此它提供了明确的信息,即存在语义错误。

但是,我不清楚它是否是语法错误?

由于代码遭受以下输出:

expected '=', ',', ';', 'asm' or '__attribute__' before 'b'

这表明语法未在程序中正确编码。这是否意味着语法错误?

或者,我尝试将此程序运行为:

#include<stdio.h>

int main()

{   
      typedef float aloft;

      aloft a b ;

      a = 4.00 ; b = 20.00;

      printf("%d %d",a,b);

      return 0;

}

但是输出显示B未声明且不使用逗号,等等。

prog.c: In function 'main':
prog.c:8:15: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'b'
       aloft a b ;
               ^
prog.c:8:15: error: 'b' undeclared (first use in this function)
prog.c:8:15: note: each undeclared identifier is reported only once for each function it appears in
prog.c:10:7: error: 'a' undeclared (first use in this function)
       a = 4.00 ; b = 20.00;
       ^

很明显存在语义错误。但是,有语法错误吗?如果没有,那么它如何通过语法分析阶段?

1 个答案:

答案 0 :(得分:2)

有语法和语义错误。

语法错误在ab之间缺少逗号。

对于aloftfloat变量,语义错误是错误的类型名称(a而不是b)。

您同时看到语法和语义错误的原因是编译器在恢复和提供尽可能多的输出方面做得最好。即使它可能具有误导性并且产生的数量远远超过确定根本原因所必需的,但在许多情况下,它可能有助于并避免许多编译器按顺序修复问题。