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

yrdbyhpb  于 2023-03-28  发布在  其他
关注(0)|答案(4)|浏览(93)
#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

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

myzjeezk

myzjeezk1#

如果x是一个带1个参数的函数,这将是合法的c语法--但它只是一个int
如果你这样做的话,这将是一个语法错误:

int x, y;

y=x((5;
return 0;
k3fezbri

k3fezbri2#

我会说这是一个语义错误,具体来说,是一个类型错误。令牌序列y = x(5)良好,x(5)部分被解析为函数调用表达式。错误是x没有计算为函数指针,而是计算为int

y0u0uwnf

y0u0uwnf3#

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

kse8i1jr

kse8i1jr4#

它会清除语法分析通道,因为它只是检查是否有语法错误。我的意思是y=x(5);
它说5 in传入了函数x,并将值返回给y。
但是,在解析时没有分配x是整数变量而不是过程的含义。因此,在语义分析中,当分配逻辑含义时,它知道这是不可能的。
所以,考虑到这是逻辑错误,我们可以说这是语义错误

相关问题