int 2ab;
int 2;
对于上述声明,请说明哪一个是C语言中的词法错误和语法错误。我在两个声明中都很困惑。
答案 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;
以上有效声明是不使用;-)