使用语句的返回值

时间:2013-12-12 06:38:24

标签: c return statements

我想知道是否可以在C中使用语句的返回值。

例如:如果我从a=0;开始,那么我知道表达式a++将返回0而a+=1将返回1.但是在谈论语句时,是否存在语义差异a++;a+=1;

首先,它们看起来都有类似的行为,因此,唯一的区别可能是存在使用语句返回值的方法。可能吗?

2 个答案:

答案 0 :(得分:7)

语句没有返回值。表达式具有值(除非void类型)。有些表达也有副作用。

a++的值等于a的原始值,a+=1的值大于a的原始值。

a分配新值是一个副作用。两种表达都有相同的副作用。

没有什么比这更复杂了。请注意,除非存在序列点,否则根据同一语句中的副作用(不仅仅是相同的子表达式)会产生未定义的行为。同一语句中的多个副作用和副作用依赖项是一个更高级的主题,因此最好使赋值语句保持简单。

答案 1 :(得分:1)

您希望比较++a(a+=1),它们都将返回1

a++表示返回旧值,然后更改a

++a表示向a添加一个,并返回新值

(a+=1)表示将一个添加到a并返回新值(但从技术上讲,它可能会更慢)

就其自身而言,++aa++a+=1都是一样的

如果您致电:foo(a++)foo(a+=1) foo将传递不同的值。

技术上++a可能比a+=1快,但任何级别的优化都应该导致同样的事情