c - 设计一个函数,使其在 C 中没有全局变量

标签 c

我试图在我的程序中重新设计一个简单的函数来摆脱全局变量,但我不确定最好/最简单的方法是什么。

圆函数.c

#include "circlefunctions.h"
#define PI 3.14

float   diameter;
double  radius;
double  surface;
double  outline;

void circle_functions()
{
    radius   = diameter / 2;
    surface  = PI * (radius * radius);
    outline  = 2 * PI * radius;
}

圆函数.h

extern float  diameter;
extern double radius;
extern double surface;
extern double outline;

void circle_functions();

问题是我目前在程序的其他部分使用这些变量。 我的解决方案是将值传递给数组并在程序内移动该数据。

还有其他人建议将我的功能重新设计成这样:

double circle_functions(double diameter)
{
  double radius = diameter / 2;
  double surface = PI * (radius * radius);
  double outline = 2 * PI * radius;
  return outline;
}

但是当我这样做时,我得到一个编译错误,变量:surface 未被使用。 (公平地说,我不确定如何正确使用第二种解决方案。

希望有人能给我一个关于如何解决这个问题的正确方向的指示。

编辑

根据要求:

例如,我还有一个名为 circlemenu.c 的文件(可能应该将其重命名为 circleresults.c)

#include <stdio.h>
#include "circlefunctions.h"
#include "circlemenu.h"

void info_top()
{
    system("cls");
    printf(" ----------------------------------------\n");
    printf(" Typ the diameter of the circle: ");
}

void info_bottom()
{
    printf(" ----------------------------------------\n");
    printf(" The radius = %f \n\n" , radius);
    printf(" The surface = %f \n\n" , surface);
    printf(" The outline = %f \n" , outline);
    printf(" ----------------------------------------\n");
}

最佳答案

你也可以这样做

   double getRadius(double diameter)
{
  double radius = diameter / 2;
  return radius;
}

double getSurface(double diameter){
   double radius = getRadius(diameter);
   return PI * (radius * radius);
}

double getOutline(double diameter){
    double radius = getRadius(diameter);
    return 2 * PI * radius;
}

并且您在程序中使用这些 getter 函数。它将使您的代码可读且干净。

像这样使用它:

void someFunction(double diameter){
    //need surface for some calculations.
    double surface = getSurface(diameter);
    //need outline to do something
    double outline = getOutline(diameter);

    //now use these as you want in your function.
}

按照你的例子:

void info_bottom(double diameter)
{

    printf(" ----------------------------------------\n");
    printf(" The radius = %f \n\n" , getRadius(diameter));
    printf(" The surface = %f \n\n" , getSurface(diameter));
    printf(" The outline = %f \n" , getOutline(diameter));
    printf(" ----------------------------------------\n");
}

关于c - 设计一个函数,使其在 C 中没有全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29192894/

相关文章:

c - 我如何向 Perl 中的 popen'ed 进程发送信号?

c - 如何解决 undefined reference

c - 获取 C 程序使用的峰值内存量

c - 使用 SSE/AVX 并行化 C 代码

c - 将目录添加到 execvp() 的 PATH

c - 用指针访问零位

c - 堆栈在 c 中弹出时显示内存地址

c - 为什么我的 NDIS 筛选器驱动程序的 FilterReceiveNetBufferLists 处理程序未被调用?

c - 使用 scanf 存储字符串时出现问题

c - 关于不兼容指针类型的警告