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/