在子程序中使用不使用return有什么区别?

问题描述 投票:-3回答:1

第二段代码没有给出正确的值,因为它只传递了 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;
}
c return
1个回答
3
投票

我想让这段代码在不使用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;
}

但这被认为是不好的做法,因为函数与函数之间的联系,以及函数的实际使用,要比使用参数和返回类型更难理解,另一方面,参数和返回类型很好地显示了特定函数调用的关系和使用。

尽量避免使用全局对象,尽管在某些情况下,如果你在多个函数中使用一个对象,并且对象的作用被准确定义,那么全局对象是合适的。但在你提供的例子中,全局对象并不太适合,应避免使用。


如果没有值要返回,定义函数的返回类型为 void.

© www.soinside.com 2019 - 2024. All rights reserved.