我正在尝试在我的程序中重新设计一个简单的函数来摆脱全局变量,我不确定最好/最简单的方法是做什么。
circlefunctions.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;
}
circlefunctions.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");
}
答案 0 :(得分:1)
您也可以这样做
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");
}
答案 1 :(得分:1)
另一种流行的方法是使用宏。
e.g 让我们假设你想要一个raduis表面。
#define SURFACE(x) (PI*(x)*(x))
在代码中你可以使用它,如果半径是int / double / float那么无关紧要...... 这就是这种方式很受欢迎。
一个警告:宏在程序中使用的任何地方都被替换为整体:这可能是大量的代码重复。然而,宏对实际功能的优点是速度。将控制传递给新函数没有时间,因为控制永远不会离开home函数;宏只是使函数更长一点。
第二个警告:函数调用不能用作宏参数。
(GNU C编程教程)