using/not 在子程序中使用 return 有什么区别?

What is the difference between using/not using return in a subprogram?

第二段代码没有给出正确的值,因为它只传递了我所看到的 r 的值。但是,我想让这段代码在不使用 return 的情况下工作(只是为了学习如何以其他方式做到这一点)。另外,这两个选项之间的最佳实践是什么?谢谢! :-)

#include <stdio.h>

#define PI 3.1416

float area(float r);

int main(void)
{
  float r = 10;
  printf("Area: %.2f", area(r));
  return 0;
}

float area(float r) {
    return PI * r * r;
}
#include <stdio.h>

#define PI 3.1416

float area(float r);

int main(void)
{
  float r = 10;
  printf("Area: %.2f", area(r));
  return 0;
}

float area(float r) {
    PI * r * r;
}

I would like to make this code work without using return (just for learning how to do it in this other way).

使用 return 是从函数中实际 return 值的唯一方法。


但是,C 语法提供了两个替代选项:

  1. 可以将另一个指针作为参数传递给函数,该指针指向调用方中的一个对象,然后您可以在其中分配表达式的值。

例如:

#include <stdio.h>

#define PI 3.1416

void area(float r, float *p);

int main(void)
{
  float r = 10;
  float s;
  area(r, &s);
  printf("Area: %.2f", s);
  return 0;
}

void area(float r, float* p) {
   *p = PI * r * r;
   return;
}

  1. 也可以定义一个全局对象并将表达式的值赋给该全局对象。

例如:

#include <stdio.h>

#define PI 3.1416

float s;

void area(float r);

int main(void)
{
  float r = 10;
  area(r);
  printf("Area: %.2f", s);
  return 0;
}

void area(float r) {
    s = PI * r * r;
    return;
}

但这被认为是不好的做法,因为函数的连接以及函数的实际使用比使用参数和 return 类型更难理解,后者在另一方面显示关系和特定函数调用的使用非常好。

尽管在某些情况下全局对象是合适的,但如果您f.e,应尽可能避免使用全局对象。在多个函数中使用一个对象,并且该对象的作用是准确定义的。但是在您提供的示例中,全局对象不太适合,应避免使用。


如果不应 returned 值,则将函数的 return 类型定义为 void.

类型