c - 词法错误和语法错误的区别

标签 c parsing

int 2ab;
int 2;

对于上述声明,请指出C语言中的词法错误和语法错误。我对这两个声明感到困惑。

最佳答案

这两个声明都是无效的,因此您理所当然地感到困惑,但出于不同的原因:

  • 当编译器无法将字符序列识别为正确的词法标记时,会发生词法错误。 2ab 不是有效的 C 标记。 (请注意,2ab 是一个有效的 C 预处理 token ,可用于 token 粘贴宏,但这似乎超出了您当前的技能水平)。

  • 当标记序列与 C 构造不匹配时发生语法错误:语句、表达式、预处理指令... int 2; 是语法错误,因为类型开始定义和数字不是此类上下文中的预期标记:标识符或可能是 *(、说明符或限定符是预期的。

请注意,在 C 声明中,限定符和类型或存储说明符几乎可以以任何顺序出现:

int typedef const long cint;       // same as typedef const long int cint;
int volatile static short x;       // same as static volatile short int x;
int long unsigned long extern ll;  // same as extern unsigned long long int ll;

以上有效声明是您不应该使用的变体示例;-)

关于c - 词法错误和语法错误的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34834926/

相关文章:

c# - 解析文本框中的单词

c++ - 如何在 Qt GUI 应用程序中嵌入输出控制台窗口?

c - 无效的初始化程序?

android - 在 Kotlin 中解析持续时间字符串

javascript - 检测_vars_with_下划线_;为什么这不起作用?

c# - Html Agility Pack Xpath 不工作

java - 在 Android 中转\r\n 到一个新的列表项

C++读取大量文件的一小部分

c - 开关没有做我想做的事

c - 如何在 Mac 操作系统上等待用户的操作?