微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

语法和语义错误之间的歧义

如何解决语法和语义错误之间的歧义

对于 C/C++ lang,有一个约束,即数组中的每个元素都必须具有相同的类型。所以如果我们用多种类型的元素初始化一个数组,就会发生错误。这是语法/语法还是语义错误

解决方法

C 词法分析或语法中没有任何内容将 intvoid 区分开来。这两者在 C 语法中只出现一次,在 C 6.7.2 1 中作为类型说明符。因此,区分这两个代码示例的唯一方法:

void *x[] = { (char *) 0 };

int *x[] = { (char *) 0 };

是通过使用代码的含义,如 C 标准在约束和其他文本中给出的。它们实际上由编译器区分,因为第一个被接受而不抱怨类型,但第二个导致对数组元素初始化程序类型的抱怨。因此,这是一个语义错误。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。