APP下载

序列点在C语言表达式求值中的作用

2014-11-27周二强张妍琰

绥化学院学报 2014年8期

周二强 张妍琰

(河南城建学院计算机科学与工程学院 河南平顶山 467036)

国内现行C语言教材大多不介绍序列点,这使得读者只能记忆而不是遵循求值规则分析有序列点表达式的求值顺序。以简单的逗号表达式a=3,++a为例,设变量a为整型变量(下面表达式中出现的变量也默认为整型)。“逗号表达式自左向右依次求值”,故先对子表达式a=3求值,再对子表达式++a求值。在实际教学中善于质疑的学生往往会问:表达式中自增操作符++的优先级最高,为何要先求子表达式a=3的值?表达式求值时不是先算高优先级的操作符吗?表达式究竟有没有求值原则呢?序列点作用的缺失不仅使得学生对C语言知识的认知残缺不全,而且也影响了学生自主学习的积极性,不利于创新型人才的培养。

一、序列点的定义及分析

根据C语言标准[1][2][3],序列点就是执行序列中的一些特定点,在这些点上,前面求值的副效应(sideeffect)应彻底完成且其后求值的副效应均未发生。在教材中照搬标准让初学者学习理解序列点这个概念是不明智的,应直接向初学者指出序列点在表达式求值中起的作用。如表达式中有序列点,则求值时序列点左边的操作数要先于其右边的操作数求值。C语言表达式求值的原则为:先考虑序列点,再根据操作符的优先级和结合性。

虽然表达式求值时要首先根据序列点确定求值顺序,但在确定有序列点操作符的操作数时需要结合操作符的优先级和结合性。……

登录APP查看全文