这是语义错误还是语法错误?

时间:2013-11-13 08:56:31

标签: c compiler-errors

#include "stdio.h"

int main( )
{


    int x, y;

    y=x(5);
    return 0;
}

MSVC 2010编译器出现以下错误:

Error   1   error C2064: term does not evaluate to a function taking 1 arguments    c:\users\ae\documents\visual studio 2010\projects\text\text\text.cpp    13

2   IntelliSense: expression must have (pointer-to-) function type  c:\users\ae\documents\visual studio 2010\projects\text\text\text.cpp    13

这是语义错误还是语法错误?

4 个答案:

答案 0 :(得分:4)

语义。如果x是一个带有1个参数的函数,那将是合法的语法 - 但它只是int

如果你这样做会出现语法错误:

int x, y;

y=x((5;
return 0;

答案 1 :(得分:4)

我会说这是语义错误,特别是类型错误。令牌序列y = x(5)格式正确,x(5)部分被解析为函数调用表达式。错误是x不评估函数指针,而是评估int

答案 2 :(得分:2)

如果是语法错误,它会这么说。这是一个语义错误。这完全取决于代码中标识符的含义。

答案 3 :(得分:2)

它会清除语法分析通过,因为它只检查天气有没有语法错误。 我的意思是y=x(5);

  

它表示传入函数x的5和值返回y。

但是,在解析时没有指定x是整数变量而不是过程的含义。 因此,在分配逻辑意义时进行语义分析时,就会发现这是不可能的。

因此,将此视为逻辑错误,我们可以说语义错误