亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

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语言

  1. 扳手品类全景指南:类型、用途与关键特性详解
  2. 掌握 C# 命名空间:代码组织、作用域与最佳实践
  3. C 语言数据类型详解:int、float、char 等核心类型完全指南
  4. C 语言运算符完全指南:算术、关系、逻辑、位运算等
  5. 精通C标准库函数:实战指南
  6. C++ 变量与数据类型全解析:int、double、char、string、bool 详细指南
  7. C 语言指针完全指南:类型、用法与最佳实践
  8. C 语言编程入门:全面教程指南
  9. C 语言数据类型完全指南:整型、浮点型、void 与派生类型
  10. C 语言函数详解:定义、声明、调用与参数传递
  11. C 语言可变参数详解:stdarg.h 实战指南
  12. C# 变量完全指南:类型、存储与使用规范