自增自减运算符陷阱
函数参数中的自增自减运算符
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]#
编译器可以选择先计算函数里哪个参数的值。这个自由提高了编译器的效率,但是如果在函数参数里使用了增量运算符就会带来麻烦
通过如下原则,您可以很容易的避免这些问题:
如果一个变量出现在同一个函数的多个参数中,不要将增量或者减量运算符用在它上面。
当一个变量多次出现在一个表达式里时,不要将增量或减量运算符运用到它的上面