C语言中的一个常见问题是副作用,即语句不仅会执行计算,还会影响程序中的某些状态。例如,以下代码会将全局变量count加1,并且会在后续代码中使用:
int count = 0; void addOne() { count++; }
如果在程序中有一个需要使用count的地方,但是不希望因为调用addOne()函数而改变count的值,就会产生副作用。
为了避免这种情况,可以使用函数参数来传递值,而不是直接修改全局变量。例如,可以将代码改为:
void addOne(int *count) { (*count)++; }
然后在调用addOne()函数时传入count变量的地址:
int count = 0; addOne(&count);
这样可以保证count变量不会被无意间被修改。
另外,还有一种方式是使用函数返回值。例如,下面的代码实现了一个函数,当count小于10时,返回1,否则返回0:
int checkCount(int count) { if (count < 10) return 1; else return 0; }
在使用时,可以直接将函数的返回值作为条件,而不必直接使用count变量:
int count = 5; if (checkCount(count)) { /* do something */ }
这样也能有效避免副作用的问题。
下一篇:避免达到速率限制