我想知道是否可以在C中使用语句的返回值。
例如:如果我从a=0;
开始,那么我知道表达式a++
将返回0而a+=1
将返回1.但是在谈论语句时,是否存在语义差异a++;
和a+=1;
?
首先,它们看起来都有类似的行为,因此,唯一的区别可能是存在使用语句返回值的方法。可能吗?
答案 0 :(得分:7)
语句没有返回值。表达式具有值(除非void
类型)。有些表达也有副作用。
a++
的值等于a
的原始值,a+=1
的值大于a
的原始值。
为a
分配新值是一个副作用。两种表达都有相同的副作用。
没有什么比这更复杂了。请注意,除非存在序列点,否则根据同一语句中的副作用(不仅仅是相同的子表达式)会产生未定义的行为。同一语句中的多个副作用和副作用依赖项是一个更高级的主题,因此最好使赋值语句保持简单。
答案 1 :(得分:1)
您希望比较++a
和(a+=1)
,它们都将返回1
a++
表示返回旧值,然后更改a
++a
表示向a
添加一个,并返回新值
(a+=1)
表示将一个添加到a并返回新值(但从技术上讲,它可能会更慢)
就其自身而言,++a
,a++
和a+=1
都是一样的
如果您致电:foo(a++)
和foo(a+=1)
foo将传递不同的值。
技术上++a
可能比a+=1
快,但任何级别的优化都应该导致同样的事情