C修改函数中值的最佳方法

dan*_*996 1 c java return function assign

我用Java开发了几年,现在我想学习C,我注意到了一些差异.

在Java中,当我想从函数返回一些东西时(例如,我会写的读取用户输入)

String s;
s = new Scanner(System.in).nextLine(); 
Run Code Online (Sandbox Code Playgroud)

在CI会写

char s[20];
scanf("%d", name);
Run Code Online (Sandbox Code Playgroud)

区别在于,在Java中,函数返回一个可以直接赋值给变量的值,而在C中,函数将变量名称作为参数(分别是指向变量的指针).

我注意到了许多C函数.当我编写自己的函数时,我应该像在Java中习惯一样,还是应该使用从函数中赋值/返回值的C风格?

das*_*ght 6

仅使用返回值在C中执行操作的最大考虑因素是缺少例外.与Java不同,可以在常规调用/返回过程之外报告错误条件,但C没有此类功能.换句话说,Scanner当没有下一行时,可以选择抛出异常; scanf没有这样的选择.

如果要从函数返回错误状态,则限制为(1)将其返回静态变量(并发安全),(2)将其作为返回值返回,或者(3)将其返回一个单独的"错误"对象.有时选项(2)和(3)组合在一起.

因此scanf,当状态作为返回值返回时,您经常会看到可能失败的C API结构,其余值通过指针修改.

if (scanf("%d%d", &i, &j) == 2) {
    ... // Got 2 numbers
} else {
    fprintf(stderr, "Wrong input! Expected two numbers.");
}
Run Code Online (Sandbox Code Playgroud)

没有失败的API(例如,isalpha(ch)tolower(ch))直接返回它们的值.