运行时和语法错误之间的差异

时间:2015-12-25 12:21:01

标签: c compiler-errors syntax-error runtime-error scanf

我遇到这样的问题:

  

Q值。从这里选择任何错误:

int main(void)
{
    int a;

    printf("Input a integer number >>");
    scanf("%d\n", a);
    printf("The input number is %d\n", a);
    return 0;
}
     
      
  1. 语法错误
  2.   
  3. 逻辑错误
  4.   
  5. 运行时错误
  6.   
  7. 没有错误
  8.   

我认为这是语法和运行时错误,因为:

  • 对于语法,&前面没有a
  • 对于运行时错误,程序仍然会构建为运行第一个print语句并突然停在scanf()语句,因为没有&

然而,有人告诉我,我错了。

我知道这不是逻辑错误,但我很困惑哪一个是哪个。

2 个答案:

答案 0 :(得分:1)

不,这里不会有任何语法错误,只有运行时错误。

scanf()期望指向变量的指针存储值,但这并不强制我们必须始终使用&运算符来传递地址。

想象一下,如果a成为指针(并分配了适当的内存),

scanf("%d\n", a);

本来是一个非常有效的陈述,不是吗?

在此代码中,您已将未初始化变量的作为地址,它将无效)作为{{{格式说明符为%d,因此会调用导致运行时错误的undefined behavior

答案 1 :(得分:1)

编译器检测到语法错误。这个程序编译得很好,因此它没有语法错误。

但是,此程序将未初始化的变量a的值传递给scanf,这是未定义的行为,即运行时错误。