词法和语法错误之间的区别

时间:2016-01-17 03:54:22

标签: c

int 2ab;
int 2;

对于上述声明,请说明哪一个是C语言中的词法错误和语法错误。我在两个声明中都很困惑。

1 个答案:

答案 0 :(得分:8)

这两个声明都是无效的,所以你理所当然地混淆了,但出于不同的原因:

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

  • 当一系列令牌与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;

以上有效声明是使用;-)

的变体示例