此代码在 C 中生成哪种类型的错误?语法还是语义?

Which type of error is generated by this code in C? Syntax or Semantic?

下面的代码会产生什么错误?根据我目前看到的信息,语法错误主要在编译时识别,语义错误在运行时识别。那么下面的代码会不会抛出语法错误呢?

void f(){
    return 0;
}

编译时检测到此错误。

“语法错误”的含义通常包括一些超出形式语法的分析,特别是因为编译器可能是使用递归下降解析器实现的或以其他方式具有嵌入式逻辑这超出了形式解析器的纯数学所需要的范围。特别是 C,需要词法分析器和解析器之间的一些反馈,并且不能成为纯上下文无关语法解析器。 (如果你有兴趣,那是因为 typedef 名称在遵循语法时必须理解为类型)

如果您是开发人员,您会称其为“语法错误”,因为它很容易被编译器发现,自然是编译器生成代码所需理解的一部分。它不需要比它必须做的更深入的静态分析。

如果您是一名学习解析器和语法的 CS 学生,您会注意到它在语法上是正确的,但错误在于所陈述的内容。也就是说不是语法错误而是语义错误

这种形式上的区别在现实生活中并不是很有用,因为真实的语言需要一些语义知识才能进行解析。所以 parser 确实可以是发出错误的代理,因为在过程的早期它被设置为需要一个没有参数的裸关键字。所以对于这样的实现来说,这是一个语法问题,但是语义分析被应用于更早的修改解析器。

总之,要看你的定义。如果选择的定义是关于工具的实现的,那么你不能在抽象中说。