unsigned int integer_sum( unsigned int base ) { unsigned int index; static unsigned int sum = 0; // 注意,是static类型的。 // 若改为auto类型,则函数即变为可预测。 for (index = 1; index <= base; index++) { sum += index; } return sum; }
14 :非调度函数应减少或防止控制参数,尽量只使用数据参数 说明:本建议目的是防止函数间的控制耦合。调度函数是指根据输入的消息类型或控制命令,来启动相应的功能实体(即函数或过程),而本身并不完成具体功能。控制参数是指改变函数功能行为的参数,即函数要根据此参数来决定具体怎样工作。非调度函数的控制参数增加了函数间的控制耦合,很可能使函数间的耦合度增大,并使函数的功能不唯一。 示例:如下函数构造不太合理。 int add_sub( int a, int b, unsigned char add_sub_flg ) { if (add_sub_flg == INTEGER_ADD) { return (a + b); } else { return (a b); } } 不如分为如下两个函数清晰。 int add( int a, int b ) { return (a + b); }
int sub( int a, int b ) { return (a b); } 15 :检查函数所有参数输入的有效性