C 语言用户自定义函数四大模式对比:参数与返回值的设计权衡
C 语言用户自定义函数四大模式对比
通过判断素数这一同一任务,对比四种函数签名模式的清晰度与复用性,助你选择最优设计。
下面四个完整程序演示同一逻辑任务用不同函数签名表达。输出完全相同,但设计权衡各异,揭示函数设计关键取舍。
模式 1:无参数、无返回值
#include <stdio.h>
void checkPrimeNumber();
int main() {
checkPrimeNumber(); // 无实参
return 0;
}
void checkPrimeNumber() {
int n, i, flag = 0;
printf("Enter a positive integer: ");
scanf("%d", &n);
for(i=2; i <= n/2; ++i) {
if(n%i == 0) flag = 1;
}
if (flag == 1) printf("%d is not a prime number.", n);
else printf("%d is a prime number.", n);
}
checkPrimeNumber() 负责读输入、判素数、打印结果。返回类型 void,仅通过副作用输出结果。
模式 2:无参数、有返回值
#include <stdio.h>
int getInteger();
int main() {
int n, i, flag = 0;
n = getInteger(); // 无实参,接收返回值
for(i=2; i<=n/2; ++i) {
if(n%i==0){ flag = 1; break; }
}
if (flag == 1) printf("%d is not a prime number.", n);
else printf("%d is a prime number.", n);
return 0;
}
int getInteger() {
int n;
printf("Enter a positive integer: ");
scanf("%d", &n);
return n;
}
getInteger() 封装输入并返回值给 main,由 main 完成判素数。输入步骤分离,可复用于不同场景。
模式 3:有参数、无返回值
#include <stdio.h>
void checkPrimeAndDisplay(int n);
int main() {
int n;
printf("Enter a positive integer: ");
scanf("%d", &n);
checkPrimeAndDisplay(n); // 传入实参
return 0;
}
void checkPrimeAndDisplay(int n) {
int i, flag = 0;
for(i=2; i <= n/2; ++i) {
if(n%i == 0){ flag = 1; break; }
}
if(flag == 1) printf("%d is not a prime number.", n);
else printf("%d is a prime number.", n);
}
显示职责下沉到辅助函数。main 精简,但函数耦合算法与 I/O,复用性降低。
模式 4:有参数、有返回值
#include <stdio.h>
int checkPrimeNumber(int n);
int main() {
int n, flag;
printf("Enter a positive integer: ");
scanf("%d", &n);
flag = checkPrimeNumber(n); // 传参并接收返回值
if(flag == 1) printf("%d is not a prime number", n);
else printf("%d is a prime number", n);
return 0;
}
int checkPrimeNumber(int n) {
int i;
for(i=2; i <= n/2; ++i) {
if(n%i == 0) return 1;
}
return 0;
}
算法隔离,返回简单状态标志。调用者决定如何呈现结果,极利于库代码或大型系统集成。
选择最优模式
四种实现输出相同,但模式 4(有参、有返回)最利于维护与测试:符合单一职责原则,checkPrimeNumber 可无 I/O 依赖单元测试,易集成复杂系统。
最终选择取决于项目架构。函数需直接与用户交互时模式 3 足矣;库代码或服务层 I/O 由外部处理时,模式 4 灵活性最高。
C语言
- 扳手品类全景指南:类型、用途与关键特性详解
- 掌握 C# 命名空间:代码组织、作用域与最佳实践
- C 语言数据类型详解:int、float、char 等核心类型完全指南
- C 语言运算符完全指南:算术、关系、逻辑、位运算等
- 精通C标准库函数:实战指南
- C++ 变量与数据类型全解析:int、double、char、string、bool 详细指南
- C 语言指针完全指南:类型、用法与最佳实践
- C 语言编程入门:全面教程指南
- C 语言数据类型完全指南:整型、浮点型、void 与派生类型
- C 语言函数详解:定义、声明、调用与参数传递
- C 语言可变参数详解:stdarg.h 实战指南
- C# 变量完全指南:类型、存储与使用规范