C语言中b + + c表达式合法的原因探究
为什么
b + + c;在C语言中合法,而b ++ c;和b + ;不合法? 核心原因在于C语言编译器的词法分析规则——最大匹配原则:编译器会从左到右扫描代码,尽可能将字符组合成最长的合法符号。
关于b + + c;
编译器扫描这段代码时,会拆分出以下几个合法符号:b(标识符)、+(二元加法运算符)、+(一元正号运算符)、c(标识符)。整个表达式等价于b + (+c),完全符合C语言的语法规则:一元正号运算符作用于c,再将结果与b做加法运算,因此是合法的。
关于b ++ c;
按照最大匹配原则,编译器会把前两个+组合成++(自增运算符),此时表达式被解析为(b++) c。b++是一个后缀自增表达式,它本身是一个值,后面直接跟标识符c没有任何合法的语法对应(既不是运算符也不是函数调用等),因此触发语法错误。
关于b + ;
+作为二元加法运算符时,必须同时拥有左、右两个操作数。这里+的右侧没有任何合法操作数,不符合语法要求,所以是错误的。
内容的提问来源于stack exchange,提问作者Farbod Shahinfar
相关产品推荐
相关产品推荐

