自增自减运算符陷阱

函数参数中的自增自减运算符

 1 #include <stdio.h>
 2 
 3 int main(void)
 4 {
 5     int num = 0;
 6     while (num < 6)
 7     {
 8         printf("%5d %5d\n", num , num * num++);
 9     }
10     printf("-----------------\n");
11     num = 0;
12     while (num < 6)
13     {
14         printf("%5d %5d\n", num , num++ * num);
15     }
16     printf("-----------------\n");
17     num = 0;
18     while (num < 6)
19     {
20         printf("%5d %5d\n", num++ , num * num);
21     }
22 
23     return 0;
24 }
[root@playstation basic]# ./rules 
    1     0
    2     1
    3     4
    4     9
    5    16
    6    25
-----------------
    1     0
    2     1
    3     4
    4     9
    5    16
    6    25
-----------------
    0     0
    1     1
    2     4
    3     9
    4    16
    5    25
[root@playstation basic]# 

 

 

编译器可以选择先计算函数里哪个参数的值。这个自由提高了编译器的效率,但是如果在函数参数里使用了增量运算符就会带来麻烦

通过如下原则,您可以很容易的避免这些问题:

  如果一个变量出现在同一个函数的多个参数中,不要将增量或者减量运算符用在它上面。

  当一个变量多次出现在一个表达式里时,不要将增量或减量运算符运用到它的上面

posted @ 2014-08-20 16:13  挨踢淫才  阅读(519)  评论(0编辑  收藏  举报