5
#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

4 回答 4

4

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

如果你这样做,那将是一个语法错误:

int x, y;

y=x((5;
return 0;
于 2013-11-13T08:59:14.887 回答
4

我会说这是一个语义错误,特别是类型错误。记号序列y = x(5)格式良好,x(5)部分解析为函数调用表达式。错误在于x它不会评估为函数指针,而是评估为int.

于 2013-11-13T09:00:24.830 回答
2

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

它说函数 x 中传入了 5,并且值返回给了 y。

但是,在解析时没有指定 x 是整数变量而不是过程的含义。因此,在分配逻辑含义时的语义分析中,它知道这是不可能的。

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

于 2013-11-13T10:23:30.683 回答
2

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

于 2013-11-13T08:58:36.150 回答