Q: 3.1 为什么这行代码不对?

  a[i] = i++;


A: 子表达式i++产生副作用——它修改i的值——这导致未定义行为,因为i在同一个表达式的其它地方也被引用。无法知道对它的引用发生在副作用之前还是之后——事实上,没有明显的解释是有效的;参见问答3.9。(注意,尽管K&R暗示这种表达式的行为是未定义的,C标准更明确声明它是未定义的——参见问答11.33。)

参考:K&R1 Sec. 2.12
K&R2 Sec. 2.12
ISO Sec. 6.3
H&S Sec. 7.12 pp. 227-9


(This Chinese translation isn't confirmed by the author, and it isn't for profits.)

Translator : jhlicc@gmai1.c0m
Origin : http://www.c-faq.com/expr/evalorder1.html